Я в начале класса программирования и, похоже, испытываю серьезную проблему при поиске текстового файла. Что мой код должен делать, основываясь на уступки:Сканер только ищет первую строку .txt-файла
- Accept вход, в этом случае имя и место, что ввод в текстовый файл
- Позволяет пользователю искать имя, или его часть имя и вернуть все строки с соответствующим текстом.
У меня есть входная часть задания, и я нахожусь на грани завершения части поиска, но мой код выполняет поиск только первой строки .txt-файла. Я могу распечатать все строки .txt-файла, и если я ищу имя в строке 1 файла .txt, он правильно напечатает строку. Моя проблема возникает, когда я искал название, которое не находится на линии 1. Ниже мой код:
System.out.println ("Would you like to retrieve names from your index? (YES/NO)");
try
{
retrieve=input.readLine();
}
catch (IOException E)
{
System.out.println(E);
}
}
if (choice == 2 && retrieve.equalsIgnoreCase("YES") || retrieve.equalsIgnoreCase("Y"))
{
while (retrieve2.equalsIgnoreCase("YES") || retrieve2.equalsIgnoreCase("Y"))
{
FileReader reader = new FileReader("Name_Index.txt");
BufferedReader bufferedReader = new BufferedReader(reader);
String line = bufferedReader.readLine();
System.out.println ("Enter a string of characters in which to search by or enter \"all names\" f$
search_term = gatherInput();
System.out.println("Search results include: ");
ArrayList<String> list = new ArrayList<String>();
Scanner inFile = new Scanner (new File("Name_Index.txt"));
inFile.useDelimiter(",");
while (inFile.hasNextLine())
{
list.add(inFile.nextLine());
}
Collections.sort(list);
if (search_term.equalsIgnoreCase("all names"))
{
for (String temp : list)
{
System.out.println(temp);
}
}
else if (line.toLowerCase().contains(search_term.toLowerCase()))
{
System.out.println(line);
bufferedReader.close();
}
System.out.println("End!");
System.out.println ("Would you like to retrieve names from your index? (YES/NO)");
try
{
retrieve2=input.readLine();
}
catch (IOException E)
{
System.out.println(E);
}
}
System.out.println("Thank you, come again!");
}
}
public static String gatherInput()
{
Scanner scan = new Scanner(System.in);
String user_input = scan.nextLine();
return user_input;
}
}
Я попытался расширить время (inFile.hasNextLine()) цикл, чтобы включать в себя второй " if ", тем не менее, создает проблему для поиска« все имена »- он возвращает весь список несколько раз (однако много строк находится в файле). Я даже попытался создать еще один while (inFile.hasNextLine()) цикл во втором выражении «if», и нет никакой разницы в результатах.
Я так расстроен на этом этапе, потому что я работаю над этим кодом уже более недели и просмотрел все мои заметки и записи лекций для этого задания без какой-либо помощи. Любое понимание было бы высоко оценено.
Вы можете переформатировать вам код, чтобы отступ ясно? Кроме того, у вас есть таинственный '}' после первого блока catch ... что он закрывает? – Linus
«все имена» дают вам правильный результат? Также вы не зацикливались с объектом «BufferedReader». – Blip
@Blip Да. запрос «все имена» возвращает полный список. Тем не менее, в алфавитном порядке. – DeaLunae