我有一台扫描仪一直工作顺利,直到我尝试使用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());
}
这似乎有道理。然而,该程序无休止地循环通过大量的行与'+'。我做错了什么?
答案 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。
您的案例中的“完整令牌”,因为您没有更改分隔符,所以以空格为界。你会发现只有孤立的“+”符号,而不是代币开头的“+”符号。
另外,“领先'+'字符”的含义并不清楚。你的意思是在一行的开头或每个令牌的开头?