【问题标题】:Scanner.hasNext String matching in JavaJava 中的 Scanner.hasNext 字符串匹配
【发布时间】:2012-07-06 18:28:49
【问题描述】:

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

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

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

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”等单词。我应该如何让它考虑其中包含关键字“级别”的任何单词?

【问题讨论】:

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


    【解决方案1】:

    我想你在找Scanner.useDelimiter

    试试这个:

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

    同时根据需要转到下一个“级别”标记。

    【讨论】:

    • 是的,成功了。如果我想通过匹配字符串来做到这一点怎么办?我会使用像 Patter.compile("Level" ,Pattern.COMMENTS) 之类的东西吗??
    • 如果你也想消费等级号,你可以使用scanner.useDelimiter("Level\\d+");,意思是"Level"后跟1-n位数字
    【解决方案2】:

    hasNext、getNext等类似方法只有在设置了delimiter的情况下才有效。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-03
      • 2018-01-01
      • 2012-09-14
      • 2013-01-31
      • 2011-12-17
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多