Java - проблемы с подстрокой

1

Я собираюсь показать весь мой код здесь, чтобы вы, ребята, поняли, что я делаю.

import java.io.*;

import java.util.*;

public class Plagiarism {

    public static void main(String[] args) {

        Plagiarism myPlag = new Plagiarism();

        if  (args.length == 0) {
            System.out.println("Error: No files input");
        }
        else if (args.length > 0) {
            try {
                List<String> foo = new ArrayList<String>();
                for (int i = 0; i < 2; i++) {
                    BufferedReader reader = new BufferedReader (new FileReader (args[i]));
                    foo = simplify(reader);
                        for (int j = 0; j < foo.size(); j++) {
                            System.out.print(foo.get(j));
                        }
                }

                int blockSize = Integer.valueOf(args[2]);
                System.out.println(args[2]);
                // String line = foo.toString();
                List<String> list = new ArrayList<String>();
                for (int k = 0; k < foo.size() - blockSize; k++) {
                    list.add(foo.toString().substring(k, k+blockSize));
                }
                System.out.println(list);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static List<String> simplify(BufferedReader input) throws IOException {
        String line = null;
        List<String> myList = new ArrayList<String>();

        while ((line = input.readLine()) != null) {
            myList.add(line.replaceAll("[^a-zA-Z]","").toLowerCase());
        }
        return myList;  
    }

}

Это код, который использует подстроку.

int blockSize = Integer.valueOf(args[2]);

//"foo" is an ArrayList<String> which I have to convert toString() to use substring().
String line = foo.toString();
List<String> list = new ArrayList<String>();
for (int k = 0; k < line.length() - blockSize; k++) {
    list.add(line.substring(k, k+blockSize));
}

System.out.println(list);

Когда я укажу blockSize как 4 в cmd, это результат:

[[, a, , ab, abc ]

текстовый файл (стандартизованный с использованием моего другого кода):

abcdzaabcdd

поэтому результат должен быть следующим:

[abcd, bcdz, cdza, ] etc.

Любая помощь?

Заранее спасибо.

Теги:
string
arraylist
substring

1 ответ

1
Лучший ответ

Вот код, показывающий, как немного улучшить свой код. Основное изменение возвращает упрощенную строку из simplify метода вместо List<String> упрощенных строк, которые после преобразования в строку возвращают String в форме

[value0, value1, value2, ...]

Теперь код возвращает String в форме value0value1value2.

Другим изменением является уменьшение рычага вдавливания путем удаления ненужного else if инструкция и поток управления торможением с System.exit(0); (вы также можете использовать return; здесь).

class Plagiarism {

    public static void main(String[] args) throws Exception {
        //you are not using 'myPlag' anywhere, you can safely remove it
//      Plagiarism myPlag = new Plagiarism();

        if (args.length == 0) {
            System.out.println("Error: No files input");
            System.exit(0);
        }

        String foo = null;
        for (int i = 0; i < 2; i++) {
            BufferedReader reader = new BufferedReader(new FileReader(args[i]));
            foo = simplify(reader);
            System.out.println(foo);
        }

        int blockSize = Integer.valueOf(args[2]);
        System.out.println(args[2]);

        List<String> list = new ArrayList<String>();
        for (int k = 0; k < foo.length() - blockSize; k++) {
            list.add(foo.toString().substring(k, k + blockSize));
        }
        System.out.println(list);

    }

    public static String simplify(BufferedReader input)
            throws IOException {

        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = input.readLine()) != null) {
            sb.append(line.replaceAll("[^a-zA-Z]", "").toLowerCase());
        }
        return sb.toString();
    }
}
  • 1
    Правильно ли я сказал, что поскольку цикл blocksize находится после цикла BufferedReader, вы фактически будете только анализировать второй файл, полностью игнорируя первый?
  • 1
    @AntonH Позволяет решить одну проблему за один раз. Пусть ОП учат. Сейчас я сосредоточился на типах данных, а не на логике. Я надеялся, что OP опишет проблему, связанную только с результатом обработки второго файла (если это действительно проблема), или, возможно, оставит комментарий о том, что была такая проблема, но ему удалось решить ее самостоятельно. ,
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню