[Java]_[初級]_[String的split裡的坑]

來源:互聯網
上載者:User

標籤: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裡的坑]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.