0

我正在使用文本文件从中读取值并将该文件加载到缓冲读取器中。此后,我逐行读取文件并检查是否有任何行包含我的关键字之一(我已经将它们放在字符串列表中)。

但是,即使该行包含我正在寻找的关键字,它也不会检测到它并给它一个 Miss。这是代码

    for(int i=0;i<sortedKeywordList.size();i++)
        {
        String tempString=sortedKeywordList.get(i);
        while(US.readLine()!=null)
        {   
            String str=US.readLine();
            //System.out.println(str);
            if(str.contains(tempString)){
                System.out.println("Contains: "+tempString);
            }               
            else{
                System.out.println("Miss");
            }
        }
    }
4

5 回答 5

2

对于每个关键字,您都在使用 readLine() 遍历缓冲区。因此,在您的第一个关键字之后,您将用尽缓冲区读取,并且下一个关键字测试甚至不会执行,因为US.readLine()它给您 null。你没有重新初始化你的阅读器。

那么为什么不遍历您的文件一次(使用您的readLine()结构),然后为每一行遍历您的关键字?

编辑:正如 Hunter 所指出的那样(上面),您还在每个循环中调用 readLine() 两次。一次在您的循环测试中,一次检查每一行的关键字。我首先要确保您正确阅读文件(只需在阅读时打印出每一行)

于 2012-04-19T17:00:20.383 回答
2

你打电话给 US.readLine() 两次!

请尝试:

String tempString;
String str;

for(...)
{
    tempString = sortedKeywordList.get(i);
    while((str = US.readLine()) != null)
    {
        ...
    }
}
于 2012-04-19T17:02:18.353 回答
1

我看到两个主要问题。

  1. 你的循环倒退了。

    您编写它的方式是查看关键字 1,然后查看整个输入,检查关键字 1。现在,没有更多的输入,它移动到关键字 2,但没有输入要检查,所以它快速遍历其余关键字并退出。

    您希望循环输入,检查每个关键字,而不是通过关键字,检查输入的每一行。

    while(input){
    
        for each keyword {
        ...
    
  2. .readLine()为每次迭代调用两次,有效地跳过每隔一行。

    尝试将第一行存储在循环之外,在循环条件中检查 null,然后在循环结束之前调用 readLine juuust。

于 2012-04-19T17:06:25.570 回答
1

US.readLine()在 while 循环入口调用一次,然后在内部调用一次。这会将输入移动到下一行。此外,将字符串与.equals()和检查子字符串使用.contains()

于 2012-04-19T17:01:05.093 回答
0

有问题的数据集会很有帮助。没有它,有几个想法 -

  1. 验证排序关键字的大小写是否与文本文件中的大小写匹配。如果它们不匹配并且您需要支持不区分大小写的匹配,请将两个字符串转换为相同的大小写(例如,使用 toUpperCase()),然后使用 contains() 调用。

  2. 验证没有额外的字符(如换行符/等)附加在排序关键字的末尾。

于 2012-04-19T17:04:59.087 回答