Java Scanner vs Matcher - 正则表达式,Matcher工作,Scanner没有

时间:2013-04-17 16:16:05

标签: java regex matcher

为什么第一个块有效但第二个块没有?

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);

    }

1 个答案:

答案 0 :(得分:4)

Scanner不适合使用其hasNext(Pattern pattern)方法检索模式。它将检查下一个完整令牌是否具有所请求的模式。

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使用分隔符模式将其输入分解为标记,该分隔符模式默认匹配空格。