我想从电话号码中将区号和先前的号码分开而不加括号,所以我做到了。
String pattern = "[\\(?=\\)]";
String b = "(079)25894029".trim();
String c[] = b.split(pattern,-1);
for (int a = 0; a < c.length; a++)
System.out.println("c[" + a + "]::->" + c[a] + "\nLength::->"+ c[a].length());
输出:
c[0]::-> Length::->0
c[1]::->079 Length::->3
c[2]::->25894029 Length::->8
预期产量:
c[0]::->079 Length::->3
c[1]::->25894029 Length::->8
所以我的问题是为什么
split()
一开始会产生多余的空白,例如[, 079, 25894029]
。这是它的行为,还是我在这里出了点问题?如何获得预期的结果?
最佳答案
首先,您必须在角色类内部进行不必要的转义。您的正则表达式与:
String pattern = "[(?=)]";
现在,您得到的结果为空,因为
(
是字符串中的第一个字符,在第0个位置分割确实会导致一个空字符串。为避免该结果,请使用以下代码:
String str = "(079)25894029";
toks = (Character.isDigit(str.charAt(0))? str:str.substring(1)).split( "[(?=)]" );
for (String tok: toks)
System.out.printf("<<%s>>%n", tok);
输出:
<<079>>
<<25894029>>
关于java - 为什么split()在设置限制-1后会产生extra,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31000519/