標籤:java split c++ 規則 注意
情境:
1. 有時候需要使用某些字元來作為值的合并儲存,比如以@作為分隔字元, [email protected]@323232, 用一個屬性儲存區這3個值, 用的時候再拿出來split就可以了.
2. 問題是有時候某個值會缺失,比如第一個值沒有的情況, @[email protected] 第2,3個值沒有的情況 [email protected]@ ,當然也期望是能返回3個值,只是後邊2個值為空白字元就行了。
事實上,結果不是這樣,即使 2,3個值沒有的情況 [email protected]@ 也只返回第1個值,數組大小是1. 這就讓人很迷惑,明明有分隔字元,為什麼當看不到呢?所以再編程時要注意.
split是惰性搜尋, 後邊如果沒有值存在就當沒有結果,但是如果只有第3個值,確實能返回數組大小是3的,前兩個是Null 字元串. 也就是split遵循一個原則,返回結果和數組所在
索引一定是對應著的最少數組.
3. Java的這種做法會令寫手寫C++ split的人抓狂, 做C++切換Java時要注意.
4. 也就是說String的split 即使指定了分隔字元個數也不能得到固定的分割個數.
情況1.
String value = "\n\n2";String[] names = value.split("\n");for (int i = 0; i < names.length; i++) {System.out.println("i:"+names[i]);}
輸出:
i:i:i:2
情況2.
String value = "2\n\n";String[] names = value.split("\n");for (int i = 0; i < names.length; i++) {System.out.println("i:"+names[i]);}
輸出:
i:2
情況3:
String value = "\n\n";String[] names = value.split("\n");for (int i = 0; i < names.length; i++) {System.out.println("i:"+names[i]);}
輸出: 無輸出,個數是0.
參考:
http://tjuking.iteye.com/blog/1507855
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
[Java]_[初級]_[String的split裡的坑]