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("\\\\");
