最近启动的Java并一直试图使数据库排序从预设文本文件读取的程序,用户可以使用术语或定义本身内的关键字/术语搜索定义。按术语搜索可以正常工作,但始终找不到关键术语。
FileReader fr = new FileReader("text.txt");
BufferedReader br = new BufferedReader(fr);
boolean found = false;
String line = br.readLine(); // first line so the term itself
String lineTwo = br.readLine(); // second line which is the definition
do {
if (lineTwo.toLowerCase().contains(keyterm.toLowerCase())) {
found = true;
System.out.println("Found "+keyterm);
System.out.println(line);
System.out.println(lineTwo);
}
} while ((br.readLine()!=null)&(!found));
if (!found){System.out.println("Not Found");} br.close(); fr.close();
这是我用来检查部分有效的关键术语的方法,似乎可以找到前两行。如果存在关键术语,这将导致它输出第一个术语的定义,但是对于其他任何术语都不起作用。
编辑
它从中读取的文本文件如下所示:
术语
定义
术语
定义
每个都有自己的行。
编辑2
感谢@Matthew Kerian,它现在可以检查整个文件,将do while循环的结尾更改为
while (((lineTwo = br.readLine())!=null)&(!found));
现在,它找到了实际的定义,但现在却输出了错误的术语。
编辑3关键术语由用户输入定义
编辑4如果最后不能清除输出,则我要查找的是术语/关键术语的定义(如果它在txt文件中),或者找不到(如果找不到)。
编辑5尝试查看它正在输出的内容,并注意到它在每个“ lineTwo”之后似乎正在输出数组(文本文件中的第一个术语),似乎行并未更新。
最终编辑通过使另一个文本文件以术语定义的方式翻转,现在又变成了定义术语,从而设法彻底解决了该问题,让我在找到定义后就调用下一行,以便正确读取。
最佳答案
lineTwo
不会开始用新数据刷新。这样的事情会更好:
do {
if (lineTwo.toLowerCase().contains(keyterm.toLowerCase())) {
found = true;
System.out.println("Found "+keyterm);
System.out.println(line);
System.out.println(lineTwo);
}
} while (((lineTwo = br.readLine())!=null)&(!found));
我们仍然通过检查空值来检查EOF,但是通过将其设置为等于第二行,我们会不断刷新缓冲区。