java - 相同正则表达式的模式/匹配器与 String.split()

标签 java regex

为什么 Pattern/Matcher 可以与 (\\d+)([a-zA-Z]+) 一起使用,但 String.split() 却不能?

例如:

String line = "1A2B";

Pattern p = Pattern.compile("(\\d+)([a-zA-Z]+)");
Matcher m = p.matcher(line);
System.out.println(m.groupCount());

while(m.find())
{
    System.out.println(m.group());
}

打印:

2
1A
2B

但是:

    String line = "1A2B";
    String [] arrayOfStrings = line.split("(\\d+)([a-zA-Z]+)");
    System.out.println(arrayOfStrings.length);

    for(String elem: arrayOfStrings){
        System.out.println(elem);
    }

仅打印:

0

最佳答案

这是因为 .split(String regex) 使用正则表达式来标记在何处断开字符串。因此,在您的情况下,如果您有 1A2B£$%^& 它将打印 1 个字符串: £$%^& 因为它将在 1A 然后再次在 2B 处,但是,由于这些返回空组,因此它们被省略,您只剩下 £$%^&

另一方面,正则表达式的作用是匹配字符串并将它们分组。然后可以像您一样在稍后阶段访问这些组。

关于java - 相同正则表达式的模式/匹配器与 String.split(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27801743/

相关文章:

java - ArrayList 不...初始化?

java - 可以向Kafka生产但不能消费

Javascript 正则表达式拆分信用卡号

regex - 当大写字母在R中的单词中间跟随大写字母时拆分字符串

regex - Postgres 正则表达式贪婪控制

php - 如何在 php 中匹配水平椭圆 (...)

java - 用java打印数组

java - Notepad++ 中的多类

java - Android:关于打开 Activity 和按钮的说明

regex - 我只希望Regex仅搜索拼写错误-如何排除正确的拼写?