1

我有以下片段,它只打印出“确实”而不是整个内容:

Pattern pat = Pattern.compile("\\w+");      
    s = new Scanner("Indeed it's going to be the thing i am talking about");
   while(s.hasNext(pat)){

        System.out.println(s.next(pat));

我完全知道还有其他方法可以获得预期的输出等等。但是我想知道这个特殊情况,为什么它不起作用。

提前致谢。

4

3 回答 3

2

Pattern的 is \\w+,它匹配: [a-zA-Z_0-9],所以:

while(s.hasNext(pat))

经历一次,因为它匹配:Indeed

它不匹配it's因为',所以循环终止,你只得到Indeed. 如果您删除'它,它将按计划工作。

要修复您的代码,您可以执行以下操作:

Pattern pat = Pattern.compile("[a-zA-Z_0-9']+");

如果不明显,我只是'在您的Pattern.

于 2013-07-30T11:57:56.157 回答
1

Scanner.hasNext(String pattern)如果下一个标记与模式匹配,则返回 true。在您的情况下,第一个标记是“确实”,它与模式“。”不匹配。

于 2013-07-30T11:42:51.163 回答
0

您实际上需要该方法findInLine。将您的代码修改为:

Pattern pat = Pattern.compile("\\w+");      
Scanner s = new Scanner("Indeed it's going to be the thing i am talking about");
s.findInLine(pat);
while(s.hasNext())
        System.out.println(s.next());
于 2013-07-30T11:55:10.297 回答