【问题标题】:Escaping ',' in CSV Writing not working在 CSV 写作中转义“,”不起作用
【发布时间】:2015-08-20 07:16:36
【问题描述】:

我尝试按照以下链接解决方案 String containing comma inputting in to the csv file

for(String data : getCSVData())
{
   if (data != null && data.contains(",")) {
        data = "\"" + data + "\"";
   }
}

但如果数据像 1,234(String) 那样生成像这样的 ""1,234""。所以这些数据放在 2 个不同的单元格中。

如下输出

【问题讨论】:

  • 尽管您肯定可以自己解决问题,但我倾向于使用已经提供的库。幸运的是,Apache 有一个很酷的 CSV 库:commons.apache.org/proper/commons-csv
  • 您是否使用库来写入读/写 CSV 数据?看起来您的数据已经在 "s 内。在这种情况下,您可以在 if 条件中添加另一个检查行 data.startsWith(")。
  • 如果你没有使用库,并且你所有的数据都是 "x,xxx","x,xxx" 的形式,你可以尝试用","分割类似的东西
  • 为什么要在一边放两个双引号?只放单双引号
  • 如果我理解正确,您正在编写 CSV 文件。如果文件以逗号分隔,并使用" 作为引号字符,则"1,234", "5,789" 被正确地视为两个字符串。

标签: java csv export-to-csv


【解决方案1】:

使用双引号转义应该可以正常工作,但您可能不会通过获取 CSV 数据来更新集合以反映更改。请看下面的代码对我来说很好。

try {
            List<String> csvData = new ArrayList<String>();
            csvData.add("test");
            csvData.add("test,ing");
            csvData.add(",testing");

            List<String> newCsvData = new ArrayList<String>();

            for (String str : csvData) {
                if(str.indexOf(",") >= 0){
                    str = "\""+str+"\"";
                }
                newCsvData.add(str);
            }

            String csv = StringUtils.join(newCsvData, ',');

            System.out.println(csv);

            PrintWriter out = new PrintWriter("D://filename.csv");

            out.println(csv);

            out.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

输出:

【讨论】:

  • @sivakumar .. 这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多