String有個方法split是用來拆分字符串的,下面開始討論著字符串有哪些坑。下面正對Java做幾個實驗,采用工具jshell
命令 | 輸出結果 |
---|---|
jshell> "a,b,c".split(",") |
$1 ==> String[3] { "a", "b", "c" } |
jshell> "a,b,".split(",") |
$2 ==> String[2] { "a", "b" } |
jshell> "a,,c".split(",") |
$3 ==> String[3] { "a", "", "c" } |
jshell> ",b,c".split(",") |
$4 ==> String[3] { "", "b", "c" } |
jshell> ",b,".split(",") |
$5 ==> String[2] { "", "b" } |
",,a,,b,,".split(",") |
$6 ==> String[5] { "", "", "a", "", "b" } |
從上面的實驗中,我們先假設逗號之間或者與開頭或結尾之間拆分出來的是空字符串垦缅,我們會發(fā)現一個規(guī)律,拆分結果末尾的所有空字符串都被砍掉驹碍,而開頭的和中間的不會被砍掉壁涎。為了證明我們的結論是否正確,我們看看源碼是怎么寫的志秃。
// Construct result
int resultSize = matchList.size();
if (limit == 0)
while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
resultSize--;
String[] result = new String[resultSize];
return matchList.subList(0, resultSize).toArray(result);
從while子句中可以看出來怔球,原來砍掉后面的空格是特意要這么做的啊,倒著往前刪洽损,連續(xù)的空串都去掉庞溜。不知道為什么要這樣做,但這很容易給缺乏經驗的人造成坑!那么從JavaScript里看看是不是也這樣呢流码,我們再做做實驗又官。我們采用jrunscript工具
命令 | 輸出結果 |
---|---|
nashorn> ",,b,,b,,".split(",") |
[object Array] |
",,b,,c,,".split(",").length |
7 |
nashorn> ",,b,,c,,".split(",").toString() |
,,b,,c,, |
看來js和java還是有很大不同的。js并不會砍掉末尾的空串漫试,而是有多少算多少六敬,都裝到數組里。