2013-02-07 37 views
1

意外的结果为什么爪哇 - 从分裂

int a = 1234; 
String b = a + ""; 
String[] c = b.split(""); 

导致:

c[0] = "" 
c[1] = "1" 
c[2] = "2" 
c[3] = "3" 
c[4] = "4" 

回答

7

String.split需要一个正则表达式字符串作为参数。您提供了一个空的正则表达式,它与空字符串匹配。因此,您从字符串的开始处获得一个空字符串匹配,然后每个字符由空字符串分隔。你应该提供一个有效的正则表达式。


通常会有在分割的端部的空字符串,但爪哇有意排除这从.split所得与这一个参数的使用的阵列。

$ php -r "var_dump(preg_split('//', 1234));" 
array(6) { 
    [0]=> 
    string(0) "" 
    [1]=> 
    string(1) "1" 
    [2]=> 
    string(1) "2" 
    [3]=> 
    string(1) "3" 
    [4]=> 
    string(1) "4" 
    [5]=> 
    string(0) "" 
} 
+0

你是对的,但为什么第一个字符是“”,而不是1 –

+1

@lwinhtooko:要理解这一点,想想其实这样做'“ A,B” .split(“”) ''''''同样会导致'[“”,“a”,“b”]'。对于空字符串没什么特别的,它只是将任何字符串与空字符串分开,因为分隔符将被视为以分隔符开始,就像在逗号示例中一样。真正令人困惑的部分是为什么不考虑用分隔符来结束? :-) –

+1

*我实际上不确定为什么没有最终的空字符串......但我会说这不是你应该依赖的东西。*我不完全清楚为什么没有,但你应该能够依靠它。从[Javadoc](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)):*因此不包括尾随的空字符串在结果数组中。* –