zoukankan      html  css  js  c++  java
  • 解析csv格式的java函数

    我们经常将Excel格式的文件保存为csv格式以方便上传和修改,可是当数据中包含逗号和双引号的时候Excel会把该字段用双引号括住并把数据中的"改为"",从而给解析带来了困难。我写了以下函数来解析这样的字符串:

    testSplitCSV.java:

    import java.util.Vector;
    class  testSplitCSV{
     /**
     * Split one line of csv file
     * @return a String array results
     */
     public static String[] splitCSV(String src) throws Exception{
      if (src==null || src.equals("")) return new String[0];
      StringBuffer st=new StringBuffer();
      Vector result=new Vector();
      boolean beginWithQuote = false;
      for (int i=0;i<src.length();i++){
       char ch = src.charAt(i);
       if (ch=='/"'){
        if (beginWithQuote){
         i++;
         if (i>=src.length()){
          result.addElement(st.toString());
          st=new StringBuffer();
          beginWithQuote=false;
         }else{
          ch=src.charAt(i);
          if (ch == '/"'){
           st.append(ch);
          }else if (ch == ','){
           result.addElement(st.toString());
           st=new StringBuffer();
           beginWithQuote = false;
          }else{
           throw new Exception("Single double-quote char mustn't exist in filed "+(result.size()+1)+" while it is begined with quote/nchar at:"+i);
          }
         }
        }else if (st.length()==0){
         beginWithQuote = true;
        }else{
         throw new Exception("Quote cannot exist in a filed which doesn't begin with quote!/nfield:"+(result.size()+1));
        }
       }else if (ch==','){
        if (beginWithQuote){
         st.append(ch);
        }else{
         result.addElement(st.toString());
         st=new StringBuffer();
         beginWithQuote = false;
        }
       }else{
        st.append(ch);
       }
      }
      if (st.length()!=0){
       if (beginWithQuote){
        throw new Exception("last field is begin with but not end with double quote");
       }else{
        result.addElement(st.toString());
       }
      }
      String rs[] = new String[result.size()];
      for (int i=0;i<rs.length;i++){
       rs[i]=(String)result.elementAt(i);
      }
     return rs;
     }

     public static void main(String[] args){
      String src1=  "/"fh,zg/",sdf,/"asfs,/",/",dsdf/",/"aadf/"/"/",/"/"/"hdfg/",/"fgh/"/"dgnh/",hgfg'dfh,/"asdfa/"/"/"/"/",/"/"/"/"/"fgjhg/",/"gfhg/"/"/"/"hb/"";
      try {
       String[] Ret = splitCSV(src1);
       for (int i=0;i<Ret.length;i++){
        System.out.println(i+": "+Ret[i]);
       }
      }
      catch(Exception e) {
       e.printStackTrace();
      }
     }
    }

  • 相关阅读:
    7503E-M-irf2配置以及bfd配置
    nltk_29_pickle保存和导入分类器
    nltk_28Twitter情感分析模型
    美国在研新药_读取单个PDF
    Python:eval的妙用和滥用
    opencv_判断两张图片是否相同
    Make 命令教程
    pdf在线处理网站
    K-Means clusternig example with Python and Scikit-learn(推荐)
    自然语言27_Converting words to Features with NLTK
  • 原文地址:https://www.cnblogs.com/stonehuang/p/6603261.html
Copyright © 2011-2022 走看看