会员控制台 会员登陆 会员注册 最后更新 高级搜索 会员投稿 退出登陆
设为首页
收藏本站
留言给我
  首页 | 操作系统类 | 程序设计类 | 数据库类 | 应用服务类 | 网络及硬件类 | 其他技术 | GBunix论坛
操作系统类
程序设计类
数据库类
应用服务类
网络及硬件类
其他技术
Unix中文 / 程序设计类 / Java/j2ee / 解析csv格式的java函数
解析csv格式的java函数
2004-07-16    emu       点击:
解析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();
  }
 }
}

了解更多详情,参与讨论,请进入GBUNIX论坛

http://www.gbunix.com/bbs/index.php
责任编辑: trotter
发表评论 查看评论 加入收藏 Email给朋友 打印本文
给该文章评分
1 2 3 4 5 6 7 8 9 10
平均得分 0, 共 0 人评分
1 2 3 4 5 6 7 8 9 10
发表评论
标题:
内容:
声明:本站资讯均来自互联网,所有文章版权归原作者和出版者所有,如涉及版权问题,请来信告知!
Copyright © 2002-2004 GBunix.com. All rights reserved.