Есть два 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);
}
}
}
В первом лежит список нужных строк, во втором большое скопление рандомного бреда из которого нужно взять строки, начинающиеся так же, как и строки в первом файле.
При таком условии строка 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. Обработка исключений за Вами.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В общем, мне нужно подсчитать количество гласных букв в n введенных строках и отсортировать их по возрастанию\убываниюДля этого, я сначала...
В google maps хочу реализовать кнопку myCurrentLocationВ методе onCreate добавил следующее:
В intellij ideа, когда запущен сервер, я нажимаю обновить и табличка "Restart server" "Redeploy server", оба пересобирают артифактыМожно ли как-то обновить проект,...