java split函數的幾個問題

來源:互聯網
上載者:User

首先來看問題,然後來看函數的定義,其實什麼都在函數定義裡面說明白了

1.Regex字串問題

首先輸入的regex是一個Regex,而不是一個普通的字串,所以導致很多在Regex裡面有特殊意義的比如 "." "|" "\" ,如果直接使用是不行的,另外一個方面我們輸入的regex是以字串形式傳遞的,對有些字元必須要轉義,尤其是"\",下面請看例子

String[] aa = "aaa|bbb|ccc".split("|");//wrong
String[] aa = "aaa|bbb|ccc".split("\\|"); //

 

 String[] aa = "aaa*bbb*ccc".split("*");//wrong
 String[] aa = "aaa|bbb|ccc".split("\\*");

 

 String[] aa = "aaa*bbb*ccc".split(".");//wrong
 String[] aa = "aaa|bbb|ccc".split("\\.");

 

String[] aa = "aaa\\bbb\\bccc".split("\\");//wrong

String[] aa = "aaa\\bbb\\bccc".split("\\\\");

 

2.數組長度的問題

String a = "";
String[] b = a.split(",");
b.length為 1;
*
String a = "c";
String[] b = a.split(",");
b.length為 1;
**
String a = "c,,,";
String[] b = a.split(",");
b.length為 1;
***
String a = "c,,c";
String[] b = a.split(",");
b.length為 3;
****
String a = ",";
String[] b = a.split(",");
b.length為 0;

 

其實只要添加一個參數即可,例如

String str = "abcdef,ghijk,lmno,pqrst,,,";       

String[] array = str.split(",");
輸出:abcdef,ghijk,lmno,pqrst,

 

String str = "abcdef,ghijk,lmno,pqrst,,,";
String[] array = str.split(",",-1);

輸出:abcdef,ghijk,lmno,pqrst,,,,

 

public String [] split (String  regex, int limit) 

最後一個參數limit是影響返回數組的長度的

=========================請關注紅色字型(括弧內為注釋)==========================================

public String[] split(String regex)

根據給定的Regex的匹配來拆分此字串。

該方法的作用就像是使用給定的運算式和限制參數 0 來調用兩參數 split 方法。因此,結果數組中不包括結尾Null 字元串(直接使用會造成數組大小問題)。

例如,字串 "boo:and:foo" 產生帶有下面這些運算式的結果:

Regex 結果
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }

 

參數:
regex - 定界Regex
返回:
字串數組,根據給定Regex的匹配來拆分此字串,從而產生此數組。

public String[] split(String regex,
                      int limit)

根據匹配給定的Regex來拆分此字串。

此方法返回的數組包含此字串的每個子字串,這些子字串由另一個匹配給定的運算式的子字串終止或由字串結束來終止。數組中的子字串按它們在此字串中的順序排列。如果運算式不匹配輸入的任何部分,則結果數組只具有一個元素,即此字串。

limit 參數控制模式應用的次數,因此影響結果數組的長度。如果該限制 n 大於 0,則模式將被最多應用 n - 1 次,數組的長度將不會大於 n,而且數組的最後項將包含超出最後匹配的定界符的所有輸入。如果 n 為非正,則模式將被應用儘可能多的次數,而且數組可以是任意長度。如果 n 為零,則模式將被應用儘可能多的次數,數組可有任何長度,並且結尾Null 字元串將被丟棄。

例如,字串 "boo:and:foo" 使用這些參數可產生下列結果:

Regex Limit 結果
: 2 { "boo", "and:foo" }
: 5 { "boo", "and", "foo" }
: -2 { "boo", "and", "foo" }
o 5 { "b", "", ":and:f", "", "" }
o -2 { "b", "", ":and:f", "", "" }
o 0 { "b", "", ":and:f" }

這種形式的方法調用 str.split(regexn) 產生與以下運算式完全相同的結果:

Pattern.compile(regex).split(strn)

 

參數:
regex - 定界Regex
limit - 結果閾值,如上所述
返回:
字串數組,根據給定Regex的匹配來拆分此字串,從而產生此數組

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.