1. 程式人生 > >Java字串分割的三種方法

Java字串分割的三種方法



一、StringTokenizer方法

Java中substring方法可以分解字串,返回的是原字串的一個子字串。如果要講一個字串分解為一個一個的單詞或者標記,StringTokenizer可以幫你。

先看個例子:

public static void main(String[] args) {  

StringTokenizer st = new StringTokenizer("www.ooobj.com"".b");  

 while(st.hasMoreElements()){  

System.out.println("Token:" + st.nextToken());  

 }  

 }  

<span style="font-size:14px;">public static void main(String[] args) {
 StringTokenizer st = new StringTokenizer("www.ooobj.com", ".b");
 while(st.hasMoreElements()){
 System.out.println("Token:" + st.nextToken());
 }
 }
</span>


輸出:
Token:www
Token:ooo
Token:j
Token:com

StringTokenizer有兩個常用的方法:

1.hasMoreElements()。這個方法和hasMoreElements()方法的用法是一樣的,只是StringTokenizer為了實現Enumeration介面而實現的方法,從StringTokenizer的宣告可以看到:class StringTokenizer implements Enumeration<Object>。

2.nextElement()。這個方法和nextToken()方法的用法是一樣的,返回此 StringTokenizer 的下一個標記。

StringTokenizer的三個構造方法:

1.StringTokenizer(String str)。預設以” \t\n\r\f”(前有一個空格,引號不是)為分割符。
原始碼:
public StringTokenizer(String str) {
this(str, ” \t\n\r\f”, false);
}

例項:

public static void main(String[] args) {  

 StringTokenizer st = new StringTokenizer("www ooobj com");  

 while(st.hasMoreElements()){  

 System.out.println("Token:" + st.nextToken());  

 }  

 }  

<span style="font-size:14px;">public static void main(String[] args) {
 StringTokenizer st = new StringTokenizer("www ooobj com");
 while(st.hasMoreElements()){
 System.out.println("Token:" + st.nextToken());
 }
 }
</span>


輸出:
Token:www
Token:ooobj
Token:com

2.StringTokenizer(String str, String delim)。指定delim為分割符,看第一個例子。

3.StringTokenizer(String str, String delim, boolean returnDelims)。returnDelims為true的話則delim分割符也被視為標記。

例項:

  public static void main(String[] args) { 

  StringTokenizer st = new StringTokenizer("www.ooobj.com", ".", true); 

  while(st.hasMoreElements()){ 

  System.out.println("Token:" + st.nextToken()); 

  } 

  }

輸出:
Token:www
Token:.
Token:ooobj
Token:.
Token:com

二、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 iin sArray)Console.WriteLine(i.ToString());

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

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

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

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

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

usingSystem.Text.RegularExpressions
string content=agcsmallmacsmallgggsmallytx;
string[] resultString=Regex.Split(content,small,RegexOptions.IgnoreCase)
foreach(string iin 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 iin str2)
Console.WriteLine(i.ToString());

這裡通過[*]+ 巧妙的完成了我們的目標。

三、substring方法

java字串分解 substring用法

單引數形式:
substring(int beginIndex)
該子字串從beginIndex處的字元開始,直到此字串末尾。

雙引數形式:
substring(int beginIndex, int endIndex)
該子字串從指定的 beginIndex 處開始,直到索引 endIndex – 1 處的字元。注意:其它一些語言第二個引數往往代表長度,JAVA不一樣。該子字串的長度為 endIndex-beginIndex。

String a = "www.ooobj.com";
03 System.out.println(a);
04 String b = a.substring(2);
05 System.out.println(b);
06 String c = a.substring(1,10);
07 System.out.println(c);
08 String d = a.substring(6, a.length());
09 System.out.println(d);

輸出:

www.ooobj.com
w.ooobj.com
ww.ooobj.
obj.com

注:beginIndex不能為負數,endIndex不能超出字串長度,否則會丟擲StringIndexOutOfBoundsException異常

四,Js的substring()

語法:

程式程式碼
String.substring(start, end)

說明:
返回一個從start開始到end(不包含end)的子字串。

示例:

程式程式碼
var str="abcdefgh";
document.write(str.substring(0,1));//return:a
document.write(str.substring(2,5));//return:cde
document.write(str.substring(7,8));//return:h

js的substring()方法與java的比較相似,但js的substring()需要注意一下幾點:

1.start不一定就是第一個引數,end也不一定就是第二個引數,substring(3,1)時,開始位置是1,結束位置是3;
2.當要返回的子字串是從開始位置到結束時,end的值必須大於等於字串的長度,如上邊的str.substring(7,8),按照索引從0開始算的話end的最大值為7,但這邊卻用8,當然,使用大於8的數返回的結果也是一樣的.