最后的分隔符似乎错误

时间:2015-04-26 11:28:41

标签: java regex delimiter

我有一个包含以下字符串的文本文件:

I want to know. bye bye. I found you. I hate you. I hear you.

我想要做的是在文件中搜索目标句子。 这是我使用的代码:

public String lookFor(String target, File targetDestination) throws FileNotFoundException {
    Scanner scan = new Scanner(targetDestination);

    scan.useDelimiter("\\. ");
    while (scan.hasNext()) {
        if (scan.next().compareTo(target) == 0)
            return target;
    }
    return "Sorry,(" + target + ") cannot be found!";
}

当我试图寻找任何句子时,代码工作正常,例如:“我讨厌你”它返回“我讨厌你”,但当我试图返回最后一句“我听到你”它说它没有找到,直到我添加一个点“我听到你。”然后它返回它。

有人能解释一下究竟发生了什么吗?我觉得这是分隔符,但我对正则表达式知之甚少。

2 个答案:

答案 0 :(得分:5)

"\\. "是一个匹配点后跟空格的正则表达式。

看看你的句子:

I want to know. bye bye. I found you. I hate you. I hear you.
              ↑        ↑            ↑           ↑
      dot followed by a space    dot followed by a space 

然而,最后一个点是不是后跟一个空格,如果它是" 我听到了。"。

注意:使用调试器可以节省您的时间,让您更好地理解您的代码。

答案 1 :(得分:0)

所有评论和回答都是正确的。

您需要将分隔符正则表达式更改为"\\.\\s*",以允许零或任意数量的空格跟随该点。