作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么 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/
我是一名优秀的程序员,十分优秀!