最近启动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>
最终编辑设法通过使另一个文本文件以术语定义的方式翻转,从而现在变为定义术语,来粗略地解决该问题,一旦定义为找到,因此可以正常读取。
答案 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,但是通过将其设置为等于第二行,我们会不断刷新缓冲区。