最近启动的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,但是通过将其设置为等于第二行,我们会不断刷新缓冲区。

10-07 19:04
查看更多