Java读取CSV文件,字段数据内部带双引号的问题

读取CSV文件
例如下面是个CSV文件。
"123","10"","qwe",
"456","24"","asd",

然后通过Java读取它,得到结果
123 10" qwe
456 24" as
知道可以改这个csv文件为下面这样可以,我想知道的是不改文件可以吗?
"123","10""","qwe",
"456","24""","asd",

该回答引用chatgpt:
可以通过代码来处理带双引号的字段数据。具体步骤如下:

1.读取CSV文件时,一行一行地读取,并将每行数据用逗号分隔开。
2.对于每个字段数据,如果它以双引号开头,则需要将其与下一个字段数据进行拼接,直到找到以双引号结尾的字段数据。
3.如果拼接的过程中遇到双引号,则需要忽略该双引号,因为它是用来转义的。
4.拼接完整个字段数据后,将其中的双引号都去掉。

下面是一个Java代码示例,演示了如何处理带双引号的字段数据:


public static List<String[]> readCsvFile(String fileName) {
    List<String[]> dataList = new ArrayList<>();
    try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
        String line;
        while ((line = br.readLine()) != null) {
            String[] fields = line.split(",");
            List<String> tempList = new ArrayList<>();
            for (int i = 0; i < fields.length; i++) {
                String field = fields[i];
                if (field.startsWith("\"")) {
                    StringBuilder sb = new StringBuilder();
                    sb.append(field);
                    while (i < fields.length - 1 && !field.endsWith("\"")) {
                        i++;
                        field = fields[i];
                        sb.append(",").append(field);
                    }
                    field = sb.toString();
                }
                field = field.replaceAll("\"", "");
                tempList.add(field);
            }
            dataList.add(tempList.toArray(new String[0]));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return dataList;
}

以上示例代码使用Java的BufferedReader逐行读取CSV文件,然后使用String.split()方法将每行数据按逗号分隔开。在处理每个字段数据时,如果发现以双引号开头,则需要将其与下一个字段数据进行拼接。拼接完整个字段数据后,将其中的双引号都去掉,并将处理后的数据存入一个List中。最后将整个List返回。