Сравнение двух файлов построчно

292
26 ноября 2016, 19:15

Есть два txt-файла. В первом лежит список нужных строк, во втором большое скопление рандомного бреда из которого нужно взять строки, начинающиеся так же, как и строки в первом файле.

Содержимое первого (list):

test
test1
test2

Содержимое второго (all):

test
test1 .02
test4 .03

Собственно, никак не могу реализовать метод для решения поставленной задачи, выводит только самую первую строчку, которая не отличается. Прошу помощи и советов. Результат должен выводить это:

test
test1 .02
///строчку test4 .03 не выведет, так как её нет в содержимом первого файла.

Прилагаю свой код:

ArrayList<String> fin = new ArrayList<>();
ArrayList<String> fin2 = new ArrayList<>();
Scanner sc1 = new Scanner(new FileReader("C:\\1\\list.txt"));
Scanner sc2 = new Scanner(new FileReader("C:\\1\\all.txt"));
while (sc1.hasNext()){
    String str = sc1.nextLine();
    fin.add(str);
    while(sc2.hasNext()){
        String str2 = sc2.nextLine();
        if(str2.startsWith(fin.get(fin.size()-1))){
            fin2.add(str2);
        }
    }
}
Answer 1

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

При таком условии строка test4 .03 будет валидной, так как она начинается со слова test.

Если я правильно Вас понял, критерий отбора строки несколько другой. Строка считается валидной, если первое слово в ней соответствует одному из слов в первом файле.

В предположении такого критерия можно написать такой велосипед:

public class Main {
    public static void main(String[] args) throws IOException {
        ArrayList<String> list = getArrayListFromFile("list.txt");
        ArrayList<String> all = getArrayListFromFile("all.txt");
        System.out.println("list: " + list);
        System.out.println("all: " + all);
        deleteStrings(list, all);
        System.out.println("\nAfter removing:");
        System.out.println("all: " + all);
    }
    private static void deleteStrings(ArrayList<String> list, ArrayList<String> all) {
        Iterator<String> it = all.iterator();
        while (it.hasNext()) {
            String currentLine = it.next();
            String firstWord = currentLine.split("\\s+")[0];
            if (!list.contains(firstWord))
                it.remove();
        }
    }
    private static ArrayList<String> getArrayListFromFile(String fileName) throws IOException {
        ArrayList<String> arrayList = new ArrayList<String>();
        BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
        String sCurrentLine;
        while ((sCurrentLine = bufferedReader.readLine()) != null) {
            arrayList.add(sCurrentLine);
        }
        bufferedReader.close();
        return arrayList;
    }
}

Вывод на консоль которого будет:

list: [test, test1, test2]
all: [test, test1 .02, test4 .03]
After removing:
all: [test, test1 .02]

PS. Обработка исключений за Вами.

READ ALSO
Сортировка String по количеству гласных букв

Сортировка String по количеству гласных букв

В общем, мне нужно подсчитать количество гласных букв в n введенных строках и отсортировать их по возрастанию\убываниюДля этого, я сначала...

438
Добавление кнопки currentLocation

Добавление кнопки currentLocation

В google maps хочу реализовать кнопку myCurrentLocationВ методе onCreate добавил следующее:

244
Обновление сервера Intellij idea

Обновление сервера Intellij idea

В intellij ideа, когда запущен сервер, я нажимаю обновить и табличка "Restart server" "Redeploy server", оба пересобирают артифактыМожно ли как-то обновить проект,...

264