博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个CSV文件解析类
阅读量:7195 次
发布时间:2019-06-29

本文共 5695 字,大约阅读时间需要 18 分钟。

import java.io.BufferedReader;import java.io.FileReader;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * CsvParser * 此类参考了网上方案,在此表示感谢 * 2013-12-10 21:43:48 */public class CsvParser{    // Saved input CSV file pathname    private String inputCsvFile;        // Space mark , ; : etc.    private String spaceMark=",";        /**     * Contructor     * @param inputCsvFile     */    public CsvParser(String inputCsvFile,String spaceMark){        this.inputCsvFile=inputCsvFile;        this.spaceMark=spaceMark;    }        /**     * Contructor     * @param inputCsvFile     */    public CsvParser(String inputCsvFile){        this.inputCsvFile=inputCsvFile;        this.spaceMark=",";    }        /**     * Get parsed array from CSV file     * @return     */    public Object[] getParsedArray() throws Exception{        List
> retval=new ArrayList
>(); String regExp = getRegExp(); BufferedReader in = new BufferedReader(new FileReader(this.inputCsvFile)); String strLine; String str = ""; while ((strLine = in.readLine()) != null) { Pattern pattern = Pattern.compile(regExp); Matcher matcher = pattern.matcher(strLine); List
listTemp = new ArrayList
(); while (matcher.find()) { str = matcher.group(); str = str.trim(); if (str.endsWith(spaceMark)) { str = str.substring(0, str.length() - 1); str = str.trim(); } if (str.startsWith("\"") && str.endsWith("\"")) { str = str.substring(1, str.length() - 1); if (CsvParser.isExisted("\"\"", str)) { str = str.replaceAll("\"\"", "\""); } } if (!"".equals(str)) { listTemp.add(str); } } // Add to retval retval.add(listTemp); } in.close(); return retval.toArray(); } /** * Regular Expression for CSV parse * @return */ private String getRegExp() { final String SPECIAL_CHAR_A = "[^\",\\n  ]"; final String SPECIAL_CHAR_B = "[^\""+spaceMark+"\\n]"; StringBuffer strRegExps = new StringBuffer(); strRegExps.append("\"(("); strRegExps.append(SPECIAL_CHAR_A); strRegExps.append("*["+spaceMark+"\\n  ])*("); strRegExps.append(SPECIAL_CHAR_A); strRegExps.append("*\"{2})*)*"); strRegExps.append(SPECIAL_CHAR_A); strRegExps.append("*\"[  ]*"+spaceMark+"[  ]*"); strRegExps.append("|"); strRegExps.append(SPECIAL_CHAR_B); strRegExps.append("*[  ]*"+spaceMark+"[  ]*"); strRegExps.append("|\"(("); strRegExps.append(SPECIAL_CHAR_A); strRegExps.append("*["+spaceMark+"\\n  ])*("); strRegExps.append(SPECIAL_CHAR_A); strRegExps.append("*\"{2})*)*"); strRegExps.append(SPECIAL_CHAR_A); strRegExps.append("*\"[  ]*"); strRegExps.append("|"); strRegExps.append(SPECIAL_CHAR_B); strRegExps.append("*[  ]*"); return strRegExps.toString(); } /** * If argChar is exist in argStr * @param argChar * @param argStr * @return */ private static boolean isExisted(String argChar, String argStr) { boolean blnReturnValue = false; if ((argStr.indexOf(argChar) >= 0) && (argStr.indexOf(argChar) <= argStr.length())) { blnReturnValue = true; } return blnReturnValue; } /** * Test * @param args * @throws Exception */ public static void main(String[] args) throws Exception{ CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_not quoted_1.csv"); //CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_not quoted_2.csv"); //CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_quoted.csv"); //CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_quoted_2.csv"); //CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_1.csv",";"); //CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_2.csv",":"); Object[] arr=parser.getParsedArray(); //System.out.println(arr); for(Object obj:arr){ System.out.print("["); List
ls=(List
)obj; for(String item:ls){ System.out.println(item+","); } System.out.println("],"); } }}

 

解析CSV文件:

Column1,Column2,Column3,Column4,Column5

Roderick Manuel,2013-02-21,59 E Brillhart Ave,67526,branch damage other impulse
Lashonda Frank,2012-11-21,418 US Hwy 100,22609,fowl house
Holly Silva,2013-09-15,16345 Old Jacksboro Hwy,13140,art sand colour tray boiling
Martin Forbes,2013-04-28,69 Spr 33,91656,bag point necessary country
Josefa Berry,2008-08-21,125 Hwy' 84 E,12604,Sort industry married safe shirt
Allyson Green,2004-11-11,425 Ranch Rd 587,35059,mother political
Tim Hopkins,2005-03-17,9559 I- 820,83598,crush. surprise station' distance from
Olen Abbott,2009-02-17,2249 Westwood Dr N,15575,acid
Ana Fowler,2011-02-19,22 State Loop 426,13409,memory poor farm adjustment
Minerva House,2009-02-18,57151 Collett Rd,45782,dry summer

 

将解析完得到的数组输出如下:

[Column1,

Column2,
Column3,
Column4,
Column5,
],
[Roderick Manuel,
2013-02-21,
59 E Brillhart Ave,
67526,
branch damage other impulse,
],
[Lashonda Frank,
2012-11-21,
418 US Hwy 100,
22609,
fowl house,
],
[Holly Silva,
2013-09-15,
16345 Old Jacksboro Hwy,
13140,
art sand colour tray boiling,
],
[Martin Forbes,
2013-04-28,
69 Spr 33,
91656,
bag point necessary country,
],
[Josefa Berry,
2008-08-21,
125 Hwy' 84 E,
12604,
Sort industry married safe shirt,
],
[Allyson Green,
2004-11-11,
425 Ranch Rd 587,
35059,
mother political,
],
[Tim Hopkins,
2005-03-17,
9559 I- 820,
83598,
crush. surprise station' distance from,
],
[Olen Abbott,
2009-02-17,
2249 Westwood Dr N,
15575,
acid,
],
[Ana Fowler,
2011-02-19,
22 State Loop 426,
13409,
memory poor farm adjustment,
],
[Minerva House,
2009-02-18,
57151 Collett Rd,
45782,
dry summer,
],

转载地址:http://zptkm.baihongyu.com/

你可能感兴趣的文章
_itoa _itow _itot atoi atof atol
查看>>
想说的话
查看>>
前端静态资源版本更新与缓存之——通过gulp 在原html文件上自动化添加js、css版本号...
查看>>
c++ sizeof
查看>>
摘录:测试各阶段的意义
查看>>
成长型思维模式Not yet
查看>>
Dell PowerEdge服务器RAID卡驱动下载
查看>>
安装Stomp扩展时错误提示error: 'zend_class_entry' has no member named 'default_properties'
查看>>
构建之法第六、七章读后感
查看>>
三类人喝豆浆会要命
查看>>
dev NavBarControl控件
查看>>
数据库 锁机制
查看>>
Acdream Xor 简单数学
查看>>
java日期加减
查看>>
gcc编译器
查看>>
jquery.validate 验证机制
查看>>
PhpStorm更换主题,调整背景和字体颜色
查看>>
java——异常
查看>>
matlab从fig文件中提取数据
查看>>
mysql show profiles 使用分析sql 性能
查看>>