0

我有一个 .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(",|\"");

这样它就可以同时使用 , 和 "" 它做得很好,但在它之间打印空白行,其中,罢工并且也不能忽略双引号之间的逗号。

知道如何排序吗?

4

3 回答 3

1

不要重新发明轮子……在这里试试 Super CVS

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

问候

于 2013-08-21T07:46:27.437 回答
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
}
于 2013-08-21T08:38:45.873 回答
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 没有任何现有的类,多个分隔符的方法,但是有一些库可以让您的生活更轻松,但您始终可以选择提供自己的方法。好运

于 2013-08-21T10:22:55.427 回答