WeChat支付 2023-04-21 16:44 采纳率: 50%
浏览 23

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

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

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

  • 写回答

1条回答 默认 最新

  • 守时间的孤岛 2023-04-21 16:59
    关注

    该回答引用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返回。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月21日

悬赏问题

  • ¥15 nslt的可用模型,或者其他可以进行推理的现有模型
  • ¥15 arduino上连sim900a实现连接mqtt服务器
  • ¥15 vncviewer7.0安装后如何正确注册License许可证,激活使用
  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并2
  • ¥66 关于人体营养与饮食规划的线性规划模型
  • ¥15 基于深度学习的快递面单识别系统
  • ¥15 Multisim仿真设计地铁到站提醒电路
  • ¥15 怎么用一个500W电源给5台60W的电脑供电
  • ¥15 请推荐一个轻量级规则引擎,配合流程引擎使用,规则引擎负责判断出符合规则的流程引擎模板id
  • ¥15 Excel表只有年月怎么计算年龄