李攀博客

          java夜未眠

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            3 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks
          <DIV class=posttitle>java 中 string .split()使用方法 </DIV>

          在使用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);
          ? }

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

          顯然,+ * 不是有效的模式匹配規(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中關(guān)于SPLIT方法的問題

          <DIV id=msgcns!94407A6582AF46B7!300><DIV>今天發(fā)現(xiàn)一個簡單的問題,就是用SPLIT方法獲取的數(shù)組元素個數(shù)與實際應(yīng)該得到的不相同,真是百思不其解。</DIV><DIV>? 經(jīng)過大量嘗試和猜想,終于得出問題出在方法本身。實例:</DIV><DIV>????? 由程序自動生成了一個中為:</DIV><DIV>????? String xx = "100000004768262367, 梁旭, 男, 2147, 0, 2147, 1745.00, 402.00,, 1000.00,,,,,";</DIV><DIV>????? 以上語句實際上應(yīng)該返回15個元素,但用SPLIT方法卻只返回了10元素(到1000.00為止)。</DIV><DIV>????? 照以上語句看就只能懷疑是方法本身的問題,但從何著手呢?</DIV><DIV>????? 呵呵,再一次證明了靈感是你無法去撲捉的,是無法勉強獲得的,它就是想來就來,想走就走的。</DIV><DIV>????? 逗號,就是它,不管了先試試。把后面的幾個全部去除,結(jié)果正確,再向前截取,結(jié)果還是正確,問題只會出現(xiàn)在后面的幾個逗號上。</DIV><DIV>???? 但這幾個簡單明了的逗號會出什么問題呢?難道是跟得太緊了呀?不會吧。這樣的話為什么1000.00前面的兩個能正確。</DIV><DIV>????? 看似找到問題所在,卻又好像是找了一個死胡同。</DIV><DIV>????? 經(jīng)過漫長的思考后還是一愁莫展。最后還是決定試試唯一想到的問題所在,把后面每個逗號都間隔一個空格試試,天啦,沒想到奇跡是這樣出現(xiàn)的,結(jié)果竟然正確了!!!。</DIV><DIV>????? 繼續(xù)試了幾種情況:</DIV><DIV>??????String xx = " , , , ,, ";
          ????? System.out.println(xx.split(",").length);</DIV><DIV>????? 以上語句輸出為6,與實際結(jié)果相符。</DIV><DIV><DIV>??????String xx = ",,,,, ";
          ????? System.out.println(xx.split(",").length);</DIV><DIV>????? 以上語句輸出為6,與實際結(jié)果相符。</DIV><DIV><DIV>??????String xx = " , , , ,,";
          ????? System.out.println(xx.split(",").length);</DIV><DIV>????? 以上語句輸出為4,與實際結(jié)果相符。</DIV><DIV><DIV>??????String xx = " , , , , ,";
          ????? System.out.println(xx.split(",").length);</DIV><DIV>????? 以上語句輸出為5,與實際結(jié)果相符。</DIV><DIV>經(jīng)上以上測試,發(fā)現(xiàn)了問題就在于最后一個逗號。</DIV><DIV>如果最后沒有間隔字符則不能正確的返回元素。</DIV></DIV></DIV></DIV></DIV>

          posted on 2006-09-03 11:34 李攀 閱讀(2013) 評論(1)  編輯  收藏

          Feedback

          # re: JAVA中關(guān)于SPLIT方法的問題[未登錄] 2007-06-19 10:41 浩瀚
          解決方案呢?  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 石嘴山市| 平泉县| 渭源县| 霍城县| 商洛市| 鄱阳县| 兰州市| 旌德县| 信丰县| 武穴市| 治县。| 德格县| 申扎县| 镇巴县| 汉中市| 岑巩县| 当阳市| 招远市| 文登市| 枞阳县| 香港| 安泽县| 伽师县| 洪洞县| 治多县| 南丰县| 巨鹿县| 汕尾市| 星子县| 外汇| 吴江市| 英德市| 南投县| 德清县| 富宁县| 吴忠市| 彩票| 娱乐| 正定县| 泽库县| 同仁县|