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

Posted

技术标签:

【中文标题】Java Scanner vs Matcher - 正则表达式,Matcher 有效,Scanner 无效【英文标题】:Java Scanner vs Matcher - Regular Expressions, Matcher works, Scanner doesn't 【发布时间】:2013-04-10 12:24:02 【问题描述】:

为什么第一个区块有效,而第二个区块无效?

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

块 2

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

    

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢,您有任何文档需要支持吗? 您确定,在使用构造函数Scanner(String source) 创建Scanner 对象的情况下,此扫描器可以像使用一个完整令牌一样使用源字符串吗?我没有找到任何东西来证实我的猜测。 你能发布完整的工作演示吗?它仍然对我不起作用。 给我时间吃晚饭! @zvzfhk:对不起,你在说什么代码?我做了一些修改,请检查。

以上是关于Java Scanner vs Matcher - 正则表达式,Matcher 有效,Scanner 无效的主要内容,如果未能解决你的问题,请参考以下文章

java语言中的scanner是啥意思用来干嘛

Java 的 Scanner vs String.split() vs StringTokenizer;我应该使用哪个?

java - Scanner vs InputStreamReader - Stack Overflow

BufferedReader vs Console vs Scanner

Java如何在正则表达式中匹配重复单词?

课程作业01的思路