我正处于初级编程课程中,似乎在搜索文本文件时遇到了一个重大问题。根据作业,我的代码应该做什么:
我完成了分配的输入部分,并且即将完成检索部分,但我的代码只搜索.txt文件的第一行。我能够打印出.txt文件的所有行,如果我在.txt文件的第1行中搜索名称,它将正确打印该行。当我在搜索不在第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;
}
}
我尝试扩展 while(inFile.hasNextLine())循环以包含第二个“if”语句,但这会为“所有名称”搜索创建一个问题 - 它会返回整个列表多次(但文件中有很多行)。我甚至尝试在第二个“if”语句中创建另一个 while(inFile.hasNextLine())循环,结果没有区别。
我在这一点上非常沮丧,因为我已经在这个代码上工作了一个多星期,并且在没有任何帮助的情况下审查了我的所有笔记和演讲录音。任何见解都会非常感激。
答案 0 :(得分:1)
您只阅读文件的一行
List<String> lines = new ArrayList<>();
String line = bufferedReader.readLine();
while(line != null){
lines.add(line);
line = bufferedReader.readLine();
}
bufferedReader.close();
为什么不读取所有行并将它们存储在List中;
lines.stream().filter(l -> l.toLowerCase().contains(search_term.toLowerCase))
.forEach(s -> System.out.println(s));
然后打印包含子串ignorecase的所有行:
Do While CONDITION
Dim a as string
Wend
答案 1 :(得分:0)
您需要循环readLine()
例如:
File f = new File(ruta);
if(!f.exists()) //Error
else {
@SuppressWarnings("resource")
BufferedReader br = new BufferedReader(new FileReader(f));
String line;
while ((line = br.readLine()) != null) {
//line = the next line
}
}