使用Java Scanner的hasNext(Pattern)查找前导'+'

时间:2010-07-22 18:28:44

标签: java

我有一台扫描仪一直工作顺利,直到我尝试使用hasNext(Pattern)方法寻找一个前导'+'字符。这就是我一直在努力做的事情:

File file = new File("Somefile.txt");
Scanner input = new Scanner(file);
while (!input.hasNext(Pattern.compile("^\\+"))) {
   System.out.println("No leading +:" + input.next());
}

这似乎有道理。然而,该程序无休止地循环通过大量的行与'+'。我做错了什么?

2 个答案:

答案 0 :(得分:2)

问题在于您尝试将令牌与^的行首匹配。标记永远不会包含新行(它们将只是由分隔符分隔的子字符串),因此^没有意义。如果你想用扫描仪读取线条,我建议你这样做

Scanner input = new Scanner(file).useDelimiter("\n");

然后只需删除^即可:

while (!input.hasNext(Pattern.compile("\\+.*")))
    System.out.println("No leading +: " + input.next());

答案 1 :(得分:0)

javadoc说的是hasNext()方法:

  

如果下一个完整标记与指定模式匹配,则返回true。

您的案例中的“完整令牌”,因为您没有更改分隔符,所以以空格为界。你会发现只有孤立的“+”符号,而不是代币开头的“+”符号。

另外,“领先'+'字符”的含义并不清楚。你的意思是在一行的开头或每个令牌的开头?