解析csv格式的java函数

原创 2003年03月01日 14:01:00

我们经常将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();
  }
 }
}

CSV文件格式解析器的实现:从字符串Split到FSM

本文乃Siliphen原创,转载请注明出处:   本文分为5小节,基本上就是我刚接触CSV文件到思考、实践做一个CSV解析器的过程的还原。希望我的思路也能带领你一步步从浅到深认识CSV文件格式。   ...
  • StevenKyleLee
  • StevenKyleLee
  • 2014年07月31日 00:37
  • 14696

一种准标准CSV格式的介绍和分析以及解析算法

CSV是一种古老的数据传输格式,它的全称是Comma-Separated Values(逗号分隔值)。出生在那个标准缺失的蛮荒年代,CSV的标准一直(到2005年)是NULL——世间存在着N种CSV格...
  • breaksoftware
  • breaksoftware
  • 2013年12月04日 19:43
  • 14900

CSV标准格式解析与libcsv++实现

CSV文件是一种简单的数据表描述文件,其各字段值使用半角逗号分隔。CSV格式有很多变种,即使有一个标准文档RFC4180,各个程序对它的支持也不尽相同。最近利用闲暇时间使用C++实现了RFC4180规...
  • zhanglyung
  • zhanglyung
  • 2015年01月04日 22:21
  • 986

CSV文件格式介绍

CSV文件格式介绍在网上冲浪的时候碰到了CSV文件,不解。就去找了一些资料,整理了一下。 CSV : Comma Separate Values CSV 英文文档  CSV即Comma Separat...
  • abcpanpeng
  • abcpanpeng
  • 2007年07月31日 08:37
  • 10692

利用Python解析CSV文件

1.CSV的特点: 每行文本以行为单位呈现 字段被分隔符(通常为逗号)隔开 只存储数据 不需要任何软件就可以读取 2.手动解析CSV文件# Your task is to read the inp...
  • baidu_27438681
  • baidu_27438681
  • 2017年04月06日 23:03
  • 592

正则表达式—解析CSV文件

不同程序有不同的CSV格式,微软CSV格式文件中得到格式是用逗号将不同的字段进行分割,或者当字段包含逗号时候用双引号分割,举例如下:一、微软CSV格式匹配【文本】 your dollors,1000...
  • AirTesla
  • AirTesla
  • 2017年03月27日 18:11
  • 254

C# 解析csv文件

csv是以逗号未分割符的文本文件,其格式为,以下是百科提供的格式规则,不过也是标准规则了。 1 开头是不留空,以行为单位。 2 可含或不含列名,含列名则居文件第一行。 3 一行数据不跨行,无空行。 4...
  • chyun7290
  • chyun7290
  • 2013年12月26日 11:12
  • 1959

java 解析csv

opencsvjava读取csv的类库主要有两种,opencsv和javacsv,研究发现,javacsv最后一次更新是2014-12-10,很久不维护了。opencsv是apache的项目,并且至今...
  • wangjun5159
  • wangjun5159
  • 2016年06月13日 10:42
  • 3654

读取txt写成csv

# -*- coding: utf-8 -*- import numpy as np import csv from matplotlib import pyplot as plt wind_spe...
  • u010256153
  • u010256153
  • 2016年12月13日 13:43
  • 229

解析CSV文件

解析csv文件现在主流的文件上传和导入的文件主要有excel和csv。Excel文件解析网上有2中主流的解释方式:POI和JXL,我用的是POI解析,由于excel版本有差异,导致在解析不同版本exc...
  • liuyuan_java
  • liuyuan_java
  • 2010年01月11日 12:26
  • 9786
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解析csv格式的java函数
举报原因:
原因补充:

(最多只允许输入30个字)