Java Scanner vs Matcher——正则表达式,Matcher 有效,Scanner 无效

标签 java regex matcher

为什么第一个 block 有效而第二个 block 不有效?

int numberOfDigits = 2;
Pattern p = Pattern.compile("[01]{"+numberOfDigits+"}");
Matcher m = p.matcher("101100101011010011111000");
while(m.find()){
    System.out.println(m.group());
}

block 2

Scanner scannerSegment = new Scanner("101100101011010011111000");
   while(scannerSegment.hasNext(p)){
    String segment = scannerSegment.next(p);
        System.out.println(segment);

    }

最佳答案

Scanner 不是使用其 hasNext(Pattern pattern) 方法检索模式的合适实用程序。它将检查 next complete token 是否具有请求的模式。

Java API是最好的文档。

部分摘录:

hasNext() : Returns true if the next complete token matches the specified 
pattern. A complete token is prefixed and postfixed by input that matches 
the delimiter pattern.`

因此,如果您将输入更改为由空格或任何其他分隔符分隔(必须在定义 Scanner 对象后设置其他分隔符),它将起作用。所以这应该有效(对于当前模式):

Scanner scannerSegment = new Scanner("10 11 00 10 10 11 01 00 11 11 10 00");

即使这样也行得通(对于当前模式):

Scanner scannerSegment = new Scanner("10,11,00,10,10,11,01,00,11,11,10,00");
scannerSegment.useDelimiter(",");

编辑:Scanner使用分隔符模式将其输入分解为标记,默认情况下匹配空格。

关于Java Scanner vs Matcher——正则表达式,Matcher 有效,Scanner 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16065144/

相关文章:

java - ExecutorService 的 future 任务并未真正取消

java - 场景生成器和应用程序中的不同 anchor 结果

java - 如何将 `any` 匹配器与对象参数一起使用

java - 将 JPanel 置于 Controller 之上

java - 尽管实体已绑定(bind),但什么会导致 QuerySyntaxException : [Entity] is not mapped,?

javascript - 用于匹配 $tagname$ 形式的不完整标签的正则表达式

java - string.replaceAll() 是如何工作的?

javascript - 在 JavaScript 中拆分字符串的帮助

Java Hamcrest匹配器相当于sql连接操作

Java + 如何将包含 '(' 的字符串替换为 '\\(' 以用于pattern.compile 正则表达式