关于类扫描仪的方法的询问

时间:2013-07-30 11:34:28

标签: java regex java.util.scanner

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

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));

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

提前致谢。

3 个答案:

答案 0 :(得分:2)

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

while(s.hasNext(pat))

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

由于it's匹配',因此循环终止,您只获得Indeed。如果您删除',它将按计划运行。

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

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

如果不明显,我只是在'添加Pattern

答案 1 :(得分:1)

如果下一个标记与模式匹配,则

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

答案 2 :(得分: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());