最后一个分隔符似乎是错误的
Last delimiter seems wrong
我有一个包含以下字符串的文本文件:
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!";
}
每当我尝试寻找任何句子时,代码都可以正常工作,例如:"I hate you" it returns "I hate you",但是当我尝试 return最后一句"I hear you"说找不到,直到我加了一个点"I hear you."然后它return就找到了。
谁能解释一下到底发生了什么?感觉就是分隔符,不过我对正则表达式了解不多
"\. "
是一个匹配点后跟 space.
的正则表达式
看看你的句子:
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
但是,最后一个点是 而不是 ,如果它是“我听到你了。”,后面跟着一个 space。
注意:使用调试器可以节省您的时间并让您更好地理解您的代码。
所有评论和答案都是正确的。
您需要将分隔符正则表达式更改为 "\.\s*"
以允许零个或任意数量的空格跟在点之后。
我有一个包含以下字符串的文本文件:
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!";
}
每当我尝试寻找任何句子时,代码都可以正常工作,例如:"I hate you" it returns "I hate you",但是当我尝试 return最后一句"I hear you"说找不到,直到我加了一个点"I hear you."然后它return就找到了。
谁能解释一下到底发生了什么?感觉就是分隔符,不过我对正则表达式了解不多
"\. "
是一个匹配点后跟 space.
看看你的句子:
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
但是,最后一个点是 而不是 ,如果它是“我听到你了。”,后面跟着一个 space。
注意:使用调试器可以节省您的时间并让您更好地理解您的代码。
所有评论和答案都是正确的。
您需要将分隔符正则表达式更改为 "\.\s*"
以允许零个或任意数量的空格跟在点之后。