我有一个包含以下字符串的文本文件:
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!";
}
当我试图寻找任何句子时,代码工作正常,例如:“我讨厌你”它返回“我讨厌你”,但当我试图返回最后一句“我听到你”它说它没有找到,直到我添加一个点“我听到你。”然后它返回它。
有人能解释一下究竟发生了什么吗?我觉得这是分隔符,但我对正则表达式知之甚少。
答案 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*"
,以允许零或任意数量的空格跟随该点。