从文本文件读取时,.contains不起作用?

时间:2018-12-04 12:16:27

标签: java

最近启动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”之后都输出数组(文本文件中的第一项),好像行没有更新。 / p>

最终编辑设法通过使另一个文本文件以术语定义的方式翻转,从而现在变为定义术语,来粗略地解决该问题,一旦定义为找到,因此可以正常读取。

1 个答案:

答案 0 :(得分:1)

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