站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题解析csv格式的java函数

解析csv格式的java函数

摘要: 解析csv格式的java函数

</td> </tr> <tr> <td height="35" valign="top" class="ArticleTeitle"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="64" align="center" valign="top"> </td> </tr> <tr> <td height="20">

我们经常将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 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[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 System.out.println(i+": "+Ret[i]);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
}

程序运行结果:

D:\java>java testSplitCSV
0: fh,zg
1: sdf
2: asfs,
3: ,dsdf
4: aadf"
5: "hdfg
6: fgh"dgnh
7: hgfg'dfh
8: asdfa""
9: ""fgjhg
10: gfhg""hb

</td> </tr> </table> </td> </tr> <tr>


↑返回目录
前一篇: 简单的推箱子游戏
后一篇: 数据库事务备忘录