Java中用split函數進行分割字符串(轉)


1.語法如下

String.split(sourceStr,maxSplit)

String.split(sourceStr)

參數說明:sourceStr是被分割的字符串,maxSplit是最大的分割數

返回值說明:split函數的返回值是一個字符串數組String[]

2.示例代碼

package wang48.jiaocheng;
public class StringSplit
{
 public static void main(String[]args)
 {
  String sourceStr="1,2,3,4,5";
  String[] sourceStrArray=sourceStr.split(",");
  for(int i=0;i<sourceStrArray.length;i++)
  {
   System.out.println(sourceStrArray[i]);
  }
  
  //最多分割出3個字符串
  int maxSplit=3;
  sourceStrArray=sourceStr.split(",",maxSplit);
  for(int i=0;i<sourceStrArray.length;i++)
  {
   System.out.println(sourceStrArray[i]);
  }
  
 }

}

輸出結果:

1
2
3
4
5
1
2
3,4,5

 

---------------------------------------------------------------------------------------------------------------------------

聽 說這個split方法比那個StringTokenizer效率高一點,今天剛好用上,就拿來試試,沒有想到一試就出問題了,把折分結果打在控制台上,結 果居然是空的,我要折分的字符串是“5#1|7#2|11#3”剛用這里str.split("|")時就出問題了,看了下面這篇文章,將其改為 str.split("\\|")就OK了,這個|在正則表達式中也是個特殊字符。回頭還得弄弄正則表達式了。

public static void main(string[] args) {

string value = "192.168.128.33";

string[] names = value.split(".");

for (int i = 0; i < names.length; i++) {

system.out.println(names[i]);

}

}

運行結果:

對,沒看錯!沒有任何輸出!

讓我們來看看 split 方法的方法簽名吧:

public string[] split(string regex)

這里的參數的名稱是 regex ,也就是 regular expression (正則表達式)。這個參數並不是一個簡單的分割用的字符,而是一個正則表達式

,看了 split 方法的實現代碼就更堅定了我們的信心:

public string[] split(string regex, int limit) {

return pattern.compile(regex).split(this, limit);

}

split 的實現直接調用的 matcher 類的 split 的方法。讀者已經知道,“ . ”在正則表達式中有特殊的含義,因此我們使用的時候必須進行轉義。

public static void main(string[] args) {

string value = "192.168.128.33";

//注意要加\\,要不出不來,yeah

string[] names = value.split("\\.");

for (int i = 0; i < names.length; i++) {

system.out.println(names[i]);

}

}

輸出結果:

192

168

128

33

 

 

 

 

 

今天要用到split函數,對浮點數進行分割為子字符串,然后將結果作為字符串數組返回。

可是在寫的時候,就報錯了。在網上一搜,才知道我錯在哪里。

weight = "159.000";

1.“ . ”在正則表達式中有特殊的含義,因此使用的時候必須進行轉義。

只要將

String[] weights = weight .split(".");

 

改為

String[] weights = weight .split("\\.");

2.同樣的,對於字符"|","*","+"都得加上轉義字符,前面加上"\\"。

3.而如果是"\",那么就得寫成"\\\\"。

4.如果一個字符串中有多個分隔符,可以用"|"作為連字符。

比如:String str = "Java string-split#test",可以用Str.split(" |-|#")把每個字符串分開。這樣就把字符串分成了3個子字符串。

希望大家使用的時候,多注意這些地方。

 

 

 

 

***************************************************************************************************************************************************

在使用String.split方法分隔字符串時,分隔符如果用到一些特殊字符,可能會得不到我們預期的結果。

我們看jdk doc中說明

public String[] split(String regex)

 Splits this string around matches of the given regular expression. 

參數regex是一個 regular-expression的匹配模式而不是一個簡單的String,他對一些特殊的字符可能會出現你預想不到的結果,比如測試下面的代碼:

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

    String[] aa = "aaa|bbb|ccc".split("|");
    //String[] aa = "aaa|bbb|ccc".split("\\|"); 這樣才能得到正確的結果

    for (int i = 0 ; i <aa.length ; i++ ) {
      System.out.println("--"+aa[i]);
    }

用豎 * 分隔字符串運行將拋出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[i]);
    }

顯然,+ * 不是有效的模式匹配規則表達式,用"\\*" "\\+"轉義后即可得到正確的結果。

"|" 分隔串時雖然能夠執行,但是卻不是預期的目的,"\\|"轉義后即可得到正確的結果。

還有如果想在串中使用"\"字符,則也需要轉義.首先要表達"aaaa\bbbb"這個串就應該用"aaaa\\bbbb",如果要分隔就應該這樣才能得到正確結果:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM