Scanner.hasNext Java中的字符串匹配

时间:2012-07-06 18:28:50

标签: java regex parsing text java.util.scanner

我正在解析包含一些文本的文本文件,如下所示:

Level1
Some-text-here
Level2
Some-text-here
Level3
Some-text-here

我已经实现了解析文件的代码,并尝试计算文件中“Level”的出现次数。我就是这样做的:

Scanner scanner = new Scanner(new File(inPath));
Pattern p = Pattern.compile("Level");
while(scanner.hasNext()) {
    if(scanner.hasNext(p))  {
        ++lastLevelCreatedWas;
    }
    scanner.next();
}

然而'if'条件永远不会被命中,因为hasNext(p)试图找到“Level”的完全匹配,并且只会忽略单词“Level1”,“Level2”等等。我怎么能让它考虑包含关键字“Level”的任何单词呢?

2 个答案:

答案 0 :(得分:3)

我认为你正在寻找Scanner.useDelimiter

试试这个:

Scanner scanner = new Scanner(new File(inPath));
scanner.useDelimiter("Level");
while(scanner.hasNext()) {
    ++lastLevelCreatedWas;
    scanner.next();
}

它可以根据需要转到下一个“级别”令牌。

答案 1 :(得分:2)

hasNext,getNext和其他类似方法仅在设置分隔符时有效。

调用useDelimiter方法将分隔符设置为Scanner实例。