如何使用带有多个逗号和双引号的扫描程序在java中读取.csv文件

时间:2013-08-21 07:43:03

标签: java design-patterns java.util.scanner

我有一个.csv文件,其中包含逗号以及双引号分隔值。

现在我要解析逗号分隔值,当双引号中有值时,我希望扫描程序使用双引号作为分隔符。

解析行示例:

123,学生,“考试通知”,“模式应该相同,有效,正确”

现在我想解析它:

123  //comma seperated
student
exam notification   //when "" it should be double quote separated
pattern should be same,validated,proper  //ignore , comma in double quotes

我试过的代码:

scanner.useDelimiter(",|\"");

因此它可以同时使用两者,并且“”它表现不错,但在它之间打印空白行,“打击并且也不能忽略双引号之间的逗号。

知道怎么排序吗?

3 个答案:

答案 0 :(得分:1)

不重新发明轮子......在这里试试超级CVS

http://supercsv.sourceforge.net/examples_reading.html

此致

答案 1 :(得分:1)

使用像OpenCSV这样的CSV解析器来处理引用元素中的逗号,自动跨越多行等的值。您也可以使用该库将文本序列化为CSV格式。

CSVReader reader = new CSVReader(new FileReader("file.csv"));

String [] nextLine;
// prints the following for the line in your question
while ((nextLine = reader.readNext()) != null) {
    System.out.println(nextLine[0]); // 123
    System.out.println(nextLine[1]); // student
    System.out.println(nextLine[2]); // exam notification
    System.out.println(nextLine[3]); // pattern should be same,validated,proper
}

答案 2 :(得分:0)

有几种方法可以实现您的目标,

1。)使用支持解析CSV的现有库,如Ravi Thapliyal和它建议的Oibaf。

2.。)您可以提供您的方法

         a). if every line in your CSV have a uniform format like : 
            line 1 :  123,student,"exam notif","word , word , word"
            line 2 : 45345,not student,"no exam notif","word,word,word"
   you can say like 

        while(scan.hasNextLine()){
        String line = scan.nextLine();
        //split it using double quotes first
        temp = line.split("\"");
        //then just remove commas outside the double quoted objects
        for(int x = 0; x<temp.length; x++){
            if(temp[x].startsWith(",")) {temp[x] = temp[x].substring(1,temp[x].length()); }
            if(temp[x].endsWith(",")) {temp[x] = temp[x].substring(0,temp[x].length()-1); }
        }

就这个程序员而言,Java没有任何现有的类,多个分隔符的方法,但是有一些库可以让你的生活更轻松 ,但您总是可以选择提供自己的方法。 Gud运气