我有以下代码段,它只会打印出“确实”而不是整个内容:
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));
我完全清楚还有其他方法可以获得预期的输出等等。 但是我想知道这个特例,为什么它不起作用。
提前致谢。
答案 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());