字符串分割--java中String.split()用法

在java.lang包中有String.split()方法,返回是一個數組。
  1、“.”和“|”都是轉義字符,必須得加"\\";
  如果用“.”作爲分隔的話,必須是如下寫法:
String.split("\\."),這樣才能正確的分隔開,不能用String.split(".");
    如果用“|”作爲分隔的話,必須是如下寫法:
String.split("\\|"),這樣才能正確的分隔開,不能用String.split("|");

  2、如果在一個字符串中有多個分隔符,可以用“|”作爲連字符,比如:“acount=? and uu =? or n=?”,把三個都分隔出來,可以用
  String.split("and|or");

  3、public String[] split(String regex,int limit)根據匹配給定的正則表達式來拆分此字符串。
  此方法返回的數組包含此字符串的每個子字符串,這些子字符串由另一個匹配給定的表達式的子字符串終止或由字符串結束來終止。數組中
  的子字符串按它們在此字符串中的順序排列。如果表達式不匹配輸入的任何部分,則結果數組只具有一個元素,即此字符串。

  4、public string[] split(string regex)
  這裏的參數的名稱是 regex ,也就是 regular expression (正則表達式)。這個參數並不是一個簡單的分割用的字符,而是一個正則表達式,

他對一些特殊的字符可能會出現你預想不到的結果,比如測試下面的代碼: 

(1) 用豎線 | 分隔字符串,你將得不到預期的結果 

String[] aa ="aaa|bbb|ccc".split("|"); 
//String[] aa = "aaa|bbb|ccc".split("\\|"); 這樣才能得到正確的結果 
for(int i =0; i <aa.length ; i++){ 
System.out.println("--"+aa); 
}



(2)用豎 * 分隔字符串運行將拋出java.util.regex.PatternSyntaxException異常,用加號 + 也是如此。 

String[] aa ="aaa*bbb*ccc".split("*"); 
//String[] aa = "aaa|bbb|ccc".split("\\*"); 這樣才能得到正確的結果    
for(int i =0; i <aa.length ; i++){ 
System.out.println("--"+aa); 
}



(3)顯然,+ * 不是有效的模式匹配規則表達式,用"\\*" "\\+"轉義後即可得到正確的結果。 
(4) "|" 分隔串時雖然能夠執行,但是卻不是預期的目的,"\\|"轉義後即可得到正確的結果。 
(5)還有如果想在串中使用""字符,則也需要轉義.首先要表達"aaaa\bbbb"這個串就應該用"aaaa\\bbbb",如果要分隔就應該這樣才能得到正確結果: 
String[] aa = "aaa\\bbb\\bccc".split(\\\\); 
(6) 還有就是點號".",也要首先轉義才能得到正確的結果。


第一種方法: 

string s="abcdeabcdeabcde";
string[] sArray=s.Split('c');
foreach(string i in sArray)Console.WriteLine(i.ToString());

輸出下面的結果:
 ab 
deab 
deab 
de 

第二種方法: 
我們看到了結果是以一個指定的字符進行的分割。使用另一種構造方法對多個字符進行分割: 

string s="abcdeabcdeabcde";
string[] sArray1=s.Split(newchar[3]{'c','d','e'});
foreach(string i in sArray1)Console.WriteLine(i.ToString());

可以輸出下面的結果: 
ab 
ab 
ab 

第三種方法: 
除了以上的這兩種方法以外,第三種方法是使用正則表達式。新建一個控制檯項目。
然後先添加 using System.Text.RegularExpressions; 

using  System.Text.RegularExpressions
string content=agcsmallmacsmallgggsmallytx;
string[] resultString=Regex.Split(content,small,RegexOptions.IgnoreCase)
foreach(string i in resultString)
     Console.WriteLine(i.ToString());

輸出下面的結果: 
agc
 mac
 ggg 
ytx 

第四種方法:

 string str1="我*****是*****一*****個*****教*****師";
string[] str2; str1=str1.Replace("*****","*");
str2=str1.Split(’*‘);foreach(string i in str2)
Console.WriteLine(i.ToString());



第五種方法: 
string str1=”我**是*****一*****個*****教*****師“; 
我希望顯示的結果爲:我是一個教師。 我如果採用上面的第四種方法來做就會產生下面的錯誤:我 是一個教師。中間有空格輸出,所以輸出結果並不是希望的結果,這就又回到了正則表達式了,這時可以採用下面的第五種方法: 

string str1=‘我**是*****一*****個*****教*****師“;
string[] str2 =System.Text.RegularExpressions.Regex.Split(str1,@[*]+);
foreach(string i in str2)
Console.WriteLine(i.ToString());

這裏通過[*]+ 巧妙的完成了我們的目標。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章