![](/img/trans.png)
[英]Java - Parsing strings - String.split() versus Pattern & Matcher
[英]Pattern/Matcher vs String.split() for the same 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
处再次拆分,但是,由于这些返回空组,因此将它们省略并您只剩下£$%^&
。
另一方面,正则表达式的作用是匹配字符串并将它们分组。 然后,您可以在以后的阶段访问这些组。
为什么它不起作用
因为吐痰会消耗这些字符,并且输出列表中没有剩余字符
解
并不完美,但展望未来将为您提供帮助
String line = "1A2B";
String [] arrayOfStrings = line.split("(?=\\d+[a-zA-Z]+)");
System.out.println(arrayOfStrings.length);
for(String elem: arrayOfStrings){
System.out.println(elem);
将输出为
3
1A
2B
并不是很完美,因为前瞻在字符串的开头是正确的,因此在输出列表中的索引0处创建了一个空字符串。在示例中,您可以看到长度为3,而我们期望的是2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.