[英]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.