逗號分割符--字段中含逗號等情況的解析方法Java實現


  最近在處理文本字符串時,沒一行數據都是按照逗號分割的,每個字段值一般情況是帶有雙引號的,但是有的字段值里面還包含逗號,甚至有的字段就沒有雙引號,這個分割起來就有點麻煩了
  下面說一下我解決方法,如果誰有更好的方法,歡迎加入討論O(∩_∩)O~
/**
     * Java字符串逗號分割解析方法
     * 本專門針對雙引號中還有逗號或者某個字段無雙引號的情況而設計的
     * 例如要將字符串String sss="101,\"a\",\"中國,江蘇\",\"b\",\"中國,北京\",1,0,\"c\""按照逗號進行分割解析
     * 正確的split的結果是 (101)(a)( 中國,江蘇) ( b)( 中國,北京) ( 1)( 0)( c)
     * 如果用java的split方法的話,當遇到(中國,北京)這些字段值時就會多分割了一個字段出來,就不正確了
   * 同時,上面的101 ,1,0都不帶要雙引號,我們期望的理想字符串當然都是帶雙引號的字段值組成的字符串了
     * 但是發生上面的情況時我們感覺很惱火,以上就是本方法設計的初衷,其實這方法是大學課本數據結構中的提到的,
     * 在此用Java實現了一下,但是方法執行的效率我還沒有測試
     * @author HsuChan
     * @version 2014-11-30 22:30
     * @param sss
     * @return String [] 
     */
    public String [] commaDivider(String sss){
        //雙引號開始標記
        int qutationStart =0;
        //雙引號結束標記
        int qutationEnd =0;
        char[] charStr = sss.toCharArray();
        //用於拼接字符 作為一個字段值
        StringBuffer sbf = new StringBuffer();
        //結果list
        List<String> list = new ArrayList<String>();
        //逐個字符處理
        for(int i=0;i<charStr.length;i++) {
            //在此之前還未遇到雙引號並且當前的字符為\"
            if(qutationStart == 0&&charStr[i] == '\"') {
                
                qutationStart = 1;
                qutationEnd = 0;
                continue;
            } else if(qutationStart == 1&&charStr[i] == '\"'){
                //在此之前遇到了雙引號並且當前的字符為\" 說明字段拼接該結束了
                qutationStart = 0;
                qutationEnd = 1;
                //當最后一個字符是雙引號時,由於下次循環不會執行,所以在此保存一下
                if(i == charStr.length-1&&sbf.length() != 0) {
                    list.add(sbf.toString());
                    sbf.setLength(0);
                }
                continue;
            } else if(qutationStart == 1&&charStr[i] == ','&&qutationEnd == 0) {
                //處理 \"中國,北京\"這種不規范的字符串
                sbf.append(charStr[i]);
                continue;
            } else if(charStr[i] == ',') {
              //字段結束,將拼接好的字段值存到list中
                list.add(sbf.toString());
                sbf.setLength(0);
                continue;
            }
            //不屬於分隔符的就拼接
            sbf.append(charStr[i]);
            if(i == charStr.length-1&&sbf.length()!=0) {
                list.add(sbf.toString());
                sbf.setLength(0);
            }
            
        }
        
        return (String[])list.toArray(new String[list.size()]);
    }

本文屬100% 原創,如有分享請注明出處,謝謝。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM