处理csv文件的不同分隔符

时间:2015-05-14 22:49:11

标签: java csv delimiter

我是Java新手,现在已经掌握了基础知识。我有一个csv文件,其中的行都是以下结构:

Int,,text,text,Int,text,text,text,,text,text,,text,text,,,text,,text,,,Int,Int

当我看到csv文件时,我感到非常困惑,因为它被单个逗号,双逗号和三个逗号分隔。有时特定的文本或int也是空的,excel无法处理以再次以正确的方式显示csv。

所以我认为我使用Java编写一个程序,使列只用一个逗号分隔。然后将结果保存在新的csv文件中。 (我还没有实现如何在另一个文件中编写它)通过一些研究我设法编写了一个文件阅读器来读取csv文件,但就是这样。我怎样才能得到我想要的结果?

到目前为止我做了什么:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

class Read {
    public static void main(String[] args) {

        FileReader myFile = null;
        BufferedReader buff = null;
        final ArrayList<String> lines = new ArrayList<String>();

        try {
            myFile = new FileReader("thisisthepathofthecsvsource");
            buff = new BufferedReader(myFile);
            String line;
            while ((line = buff.readLine()) != null) {

                lines.add(line);

            }
        } catch (IOException e) {
            System.err.println("Error2 :" + e);
        } finally {
            try {
                buff.close();
                myFile.close();
            } catch (IOException e) {
                System.err.println("Error2 :" + e);
            }
        }

        final String[][] valuesArray = new String[lines.size()][];
        int cnt = 0;
        for (final String line : lines) {
            valuesArray[cnt++] = line.split(",");
        }

        for (String[] arr : valuesArray) {

            System.out.println(Arrays.toString(arr));
        }
    }

}

3 个答案:

答案 0 :(得分:1)

尝试使用开源库uniVocity-parsers,它提供了列分隔符的解决方案,如下所示:

CsvParserSettings settings = new CsvParserSettings();
settings.setSkipEmptyLines(true);
settings.getFormat().setLineSeparator("\n");
settings.getFormat().setQuote(',');       
settings.getFormat().setQuoteEscape('\\');  // escape the double backslash

答案 1 :(得分:0)

你可以在你的时间里做到这一点

String [] dataArr =  line.split(",") ; 
for(String str : dataArr){
     if(str == null || str.equlas("")) continue; 
     System.out.println(str) ; 
}

这将帮助您获取逗号分隔符文件数据。

答案 2 :(得分:0)

您想将一个或多个逗号替换为一个,那么为什么不使用正则表达式替换呢?

 String fileContent = "file,content,,test";
 fileContent = fileContent.replaceAll(",+", ",");

这将用一个逗号替换一个或多个逗号,因此应删除所有重复项。