TShopping

 找回密碼
 註冊
搜索
查看: 606|回復: 0

[教學] 字符串分割--java中String.split()用法

[複製鏈接]
發表於 2015-11-6 04:12:36 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
在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) 用豎線| 分隔字符串,你將得不到預期的結果
  1. String[] aa = "aaa|bbb|ccc".split("|");
  2. //String[] aa = "aaa|bbb|ccc".split("\\|"); 這樣才能得到正確的結果
  3. for (int i = 0 ; i <aa.length ; i++ ) {
  4. System.out.println("--"+aa);
  5. }
複製代碼



(2)用豎* 分隔字符串運行將拋出java.util.regex.PatternSyntaxException異常,用加號+ 也是如此。
  1. String[] aa = "aaa*bbb*ccc".split("*");
  2. //String[] aa = "aaa|bbb|ccc".split("\\*"); 這樣才能得到正確的結果
  3.   for (int i = 0 ; i <aa.length ; i++ ) {
  4. System.out.println("--"+aa);
  5. }
複製代碼



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

(6) 還有就是點號".",也要首先轉義才能得到正確的結果。


第一種方法:
  1. string s="abcdeabcdeabcde";
  2. string[] sArray=s.Split('c') ;
  3. foreach(string i in sArray) Console.WriteLine(i.ToString());
  4. 輸出下面的結果:
  5. ab
  6. deab
  7. deab
  8. de
複製代碼


第二種方法:
我們看到了結果是以一個指定的字符進行的分割。使用另一種構造方法對多個字符進行分割:
  1. string s="abcdeabcdeabcde";
  2. string[] sArray1=s.Split(new char[3]{'c','d','e'}) ;
  3. foreach(string i in sArray1) Console.WriteLine(i.ToString());
  4. 可以輸出下面的結果:
  5. ab
  6. ab
  7. ab
複製代碼


第三種方法:
除了以上的這兩種方法以外,第三種方法是使用正則表達式。新建一個控制台項目。
然後先添加using System.Text.RegularExpressions;
  1. using System.Text.RegularExpressions
  2. string content=agcsmallmacsmallgggsmallytx;
  3. string[] resultString=Regex.Split(content,small,RegexOptions.IgnoreCase)
  4. foreach(string i in resultString)
  5.      Console.WriteLine(i.ToString());
  6. 輸出下面的結果:
  7. agc
  8. mac
  9. ggg
  10. ytx
複製代碼


第四種方法:
  1.   string str1="我*****是*****一*****個*****教*****師";
  2. string[] str2; str1=str1.Replace("*****","*") ;
  3. str2=str1.Split('*') ; foreach(string i in str2)
  4. Console.WriteLine(i.ToString());
複製代碼



第五種方法:
string str1=”我**是*****一*****個*****教*****師“;
我希望顯示的結果為:我是一個教師。我如果採用上面的第四種方法來做就會產生下面的錯誤:我是一個教師。中間有空格輸出,所以輸出結果並不是希望的結果,這就又回到了正則表達式了,這時可以採用下面的第五種方法:
  1. string str1='我**是*****一*****個*****教*****師“;
  2. string[] str2 = System.Text.RegularExpressions.Regex.Split(str1,@<li>+);
  3. foreach(string i in str2)
  4. Console.WriteLine(i.ToString());</li>
複製代碼

這里通過+ 巧妙的完成了我們的目標。

 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-9 23:39 , Processed in 0.057882 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表