聲明:###
本片文章純屬轉(zhuǎn)載
轉(zhuǎn)載自:
Java String.split()用法小結(jié)
java String.split()函數(shù)的用法分析
在java.lang包中有String.split()方法,返回是一個數(shù)組
我在應(yīng)用中用到一些,給大家總結(jié)一下,僅供大家參考:
1、如果用“.”作為分隔的話,必須是如下寫法,String.split("\\."),這樣才能正確的分隔開,不能用String.split(".");
2涕俗、如果用“|”作為分隔的話,必須是如下寫法,String.split("\|"),這樣才能正確的分隔開,不能用String.split("|");
“.”和“|”都是轉(zhuǎn)義字符,必須得加"\";
3罗丰、如果在一個字符串中有多個分隔符,可以用“|”作為連字符,比如,“acount=? and uu =? or n=?”,把三個都分隔出來,可以用String.split("and|or");
使用String.split方法分隔字符串時,分隔符如果用到一些特殊字符,可能會得不到我們預(yù)期的結(jié)果。
我們看jdk doc中說明
public String[] split(String regex)
Splits this string around matches of the given regular expression.
參數(shù)regex是一個 regular-expression的匹配模式而不是一個簡單的String,他對一些特殊的字符可能會出現(xiàn)你預(yù)想不到的結(jié)果,比如測試下面的代碼用豎線 | 分隔字符串,你將得不到預(yù)期的結(jié)果
String[] aa = "aaa|bbb|ccc".split("|");
/*String[] aa = "aaa|bbb|ccc".split("\\|"); 這樣才能得到正確的結(jié)果 */
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("\\*"); 這樣才能得到正確的結(jié)果*/
for (int i = 0 ; i <aa.length ; i++ ) {
System.out.println("--"+aa[i]);
}
顯然, + * 不是有效的模式匹配規(guī)則表達(dá)式,用"\\*" "\\+"轉(zhuǎn)義后即可得到正確的結(jié)果萌抵。
"|" 分隔串時雖然能夠執(zhí)行,但是卻不是預(yù)期的目的,"\|"轉(zhuǎn)義后即可得到正確的結(jié)果。
還有如果想在串中使用""字符,則也需要轉(zhuǎn)義.首先要表達(dá)"aaaa\bbbb"這個串就應(yīng)該用"aaaa\\bbbb",如果要分隔就應(yīng)該這樣才能得到正確結(jié)果,
String[] aa = "aaa\\bbb\\bccc".split("\\\\");
java String.split()函數(shù)的用法分析
- 在java.lang包中有String.split()方法的原型是:
public String[] split(String regex, int limit) - split函數(shù)是用于使用特定的切割符(regex)來分隔字符串成一個字符串?dāng)?shù)組元镀,函數(shù)返回是一個數(shù)組绍填。在其中每個出現(xiàn)regex的位置都要進(jìn)行分解。
- 需要注意是有以下幾點:
(1)regex是可選項栖疑。字符串或正則表達(dá)式對象讨永,它標(biāo)識了分隔字符串時使用的是一個還是多個字符。如果忽略該選項遇革,返回包含整個字符串的單一元素數(shù)組卿闹。
(2)limit也是可選項。該值用來限制返回數(shù)組中的元素個數(shù)澳淑。
(3)要注意轉(zhuǎn)義字符:“.”和“|”都是轉(zhuǎn)義字符,必須得加"\"插佛。同理:*和+也是如此的杠巡。如果用“.”作為分隔的話,必須是如下寫法:String.split("\\."),這樣才能正確的分隔開雇寇,不能用String.split(".");如果用“|”作為分隔的話氢拥,必須是如下寫法:String.split("\\|"),這樣才能正確的分隔開,不能用String.split("|");
(4)如果在一個字符串中有多個分隔符锨侯,可以用“|”作為連字符嫩海,比如:“acountId=? and act_id =? or extra=?”,把三個都分隔出來,可以用String.split("and|or");
(5)split函數(shù)結(jié)果與regex密切相關(guān)囚痴,常見的幾種情況如下所示:
public class SplitTest {
public static void main(String[] args) {
String str1 = "a-b";
String str2 = "a-b-";
String str3 = "-a-b";
String str4 = "-a-b-";
String str5 = "a";
String str6 = "-";
String str7 = "--";
String str8 = "";
split(str1);
split(str2);
split(str3);
split(str4);
split(str5);
split(str6);
split(str7);
split(str8);
}
public static void split(String demo){
String[] array = demo.split("-");
int len = array.length;
System.out.print("\"" + demo + "\" 分割后的長度為:" + len);
if(len >= 0)
{
System.out.print(",分割后的結(jié)果為:");
for(int i=0; i<len; i++)
{
System.out.print(" \""+array[i]+"\"");
}
}
System.out.println();
}
}
運行結(jié)果為:
"a-b" 分割后的長度為:2,分割后的結(jié)果為: "a" "b"
"a-b-" 分割后的長度為:2,分割后的結(jié)果為: "a" "b"
"-a-b" 分割后的長度為:3,分割后的結(jié)果為: "" "a" "b"
"-a-b-" 分割后的長度為:3,分割后的結(jié)果為: "" "a" "b"
"a" 分割后的長度為:1,分割后的結(jié)果為: "a"
"-" 分割后的長度為:0,分割后的結(jié)果為:
"--" 分割后的長度為:0,分割后的結(jié)果為:
"" 分割后的長度為:1,分割后的結(jié)果為: ""
由此可以得出來:
當(dāng)字符串只包含分隔符時叁怪,返回數(shù)組沒有元素;
當(dāng)字符串不包含分隔符時深滚,返回數(shù)組只包含一個元素(該字符串本身)奕谭;
字符串最尾部出現(xiàn)的分隔符可以看成不存在涣觉,不影響字符串的分隔;
字符串最前端出現(xiàn)的分隔符將分隔出一個空字符串以及剩下的部分的正常分隔血柳;