李攀博客

          java夜未眠

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

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

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

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

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

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

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

          JAVA中關于SPLIT方法的問題

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

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

          Feedback

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


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


          網站導航:
           
          主站蜘蛛池模板: 吉林市| 苍南县| 简阳市| 湖南省| 平凉市| 玉龙| 安庆市| 安岳县| 嘉禾县| 岢岚县| 延吉市| 和政县| 北海市| 湖州市| 睢宁县| 奉贤区| 漠河县| 新河县| 白朗县| 定陶县| 舒兰市| 皮山县| 龙口市| 芮城县| 巴塘县| 辽阳市| 永平县| 绥芬河市| 和硕县| 武汉市| 泸定县| 赤峰市| 芜湖市| 广宁县| 呼图壁县| 馆陶县| 明光市| 宁国市| 竹溪县| 荥阳市| 分宜县|