java String.split()函數(shù)的用法分析

聲明:###

本片文章純屬轉(zhuǎn)載
轉(zhuǎn)載自:
Java String.split()用法小結(jié)
java String.split()函數(shù)的用法分析


Java String.split()用法小結(jié)

在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)的分隔符將分隔出一個空字符串以及剩下的部分的正常分隔血柳;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末官册,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子难捌,更是在濱河造成了極大的恐慌膝宁,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件根吁,死亡現(xiàn)場離奇詭異员淫,居然都是意外死亡,警方通過查閱死者的電腦和手機婴栽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門满粗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愚争,你說我怎么就攤上這事映皆。” “怎么了轰枝?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵捅彻,是天一觀的道長。 經(jīng)常有香客問我鞍陨,道長步淹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任诚撵,我火速辦了婚禮缭裆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寿烟。我一直安慰自己澈驼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布筛武。 她就那樣靜靜地躺著缝其,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徘六。 梳的紋絲不亂的頭發(fā)上内边,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音待锈,去河邊找鬼漠其。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辉懒。 我是一名探鬼主播阳惹,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼眶俩!你這毒婦竟也來了莹汤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤颠印,失蹤者是張志新(化名)和其女友劉穎纲岭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體线罕,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡止潮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了钞楼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喇闸。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖询件,靈堂內(nèi)的尸體忽然破棺而出燃乍,到底是詐尸還是另有隱情,我是刑警寧澤宛琅,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布刻蟹,位于F島的核電站,受9級特大地震影響嘿辟,放射性物質(zhì)發(fā)生泄漏舆瘪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一红伦、第九天 我趴在偏房一處隱蔽的房頂上張望英古。 院中可真熱鬧,春花似錦昙读、人聲如沸召调。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽某残。三九已至国撵,卻和暖如春陵吸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背介牙。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工壮虫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓囚似,卻偏偏與公主長得像剩拢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子饶唤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容