CSV逗号分隔符文件解析

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;

public class CsvParser {
	// Saved input CSV file pathname
	private String inputCsvFile;
	
	// Space mark , ; : etc.
	private String spaceMark=",";
	
	private Object[] arr = null;
	/**
	 * Constructor
	 * @param inputCsvFile
	 * @param spaceMark
	 */
	public CsvParser(String inputCsvFile,String spaceMark){
		this.inputCsvFile=inputCsvFile;
		this.spaceMark=spaceMark;
	}
	
	/**
	 * Constructor
	 * @param inputCsvFile
	 */
	public CsvParser(String inputCsvFile){
		this.inputCsvFile=inputCsvFile;
		this.spaceMark=",";
	}
	
	/**
	 * Get parsed array from CSV file
	 * @return
	 */
	public Object[] getParsedArray() {
		List
   
   
    
    
     
     > retval=new ArrayList
     
     
      
      
       
       >();
		try {
			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 (isExisted("\"\"", str)) { str = str.replaceAll("\"\"", "\""); } } if (!"".equals(str)) { listTemp.add(str); } } // Add to retval retval.add(listTemp); } in.close(); } catch (Exception e) { e.printStackTrace(); } arr = retval.toArray(); return arr; } public void printArr() { if (arr != null) { for(Object obj : arr) { List 
         
           list = (List 
          
            ) obj; StringBuffer sb = new StringBuffer(); for(String item : list) { sb.append(item + ","); } sb.setLength(sb.length() - 1); System.out.println("[" + sb + "]"); } } } /** * 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 boolean isExisted(String argChar, String argStr) { boolean blnReturnValue = false; if ((argStr.indexOf(argChar) >= 0) && (argStr.indexOf(argChar) <= argStr.length())) { blnReturnValue = true; } return blnReturnValue; } } 
           
          
         
       
      
      
     
     
    
    
   
   


测试类

public class MainTest {
	public static void main(String[] args)
	{
		CsvParser csvParser = new CsvParser("D:\\test.csv");
		Object[] data = csvParser.getParsedArray();
		csvParser.printArr();
	}
}

data是一个String二维数组,对应csv文件中的每一个字段


代码参考:http://www.cnblogs.com/xiandedanteng/p/3470609.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值