java 写入CSV时单词不以逗号分隔

jjhzyzn0  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(122)

代码成功写入CSV,但写入一个单元格中的每一行。
例如:

hămăit, hămăit, SUBST, 98226, 98226, null, ron, n
hămăit, hămăit, SUBST, 2, 98226, nom-sg, ron, n

上面的例子被正确地分成了几行,但每行只是一个单元格,没有用逗号分隔。
这是文本在写入csv之前的外观:

[hămăit, hămăit, SUBST, 98226, 98226, null, ron, {{n}}, hămăit, hămăit, SUBST, 2, 98226, nom-sg, ron, {{n}}, ...

下面是我的代码。

public String escapeSpecialCharacters(String data) {
   String escapedData = data.replaceAll("\\R", " ");
   escapedData = escapedData.replaceAll("\\{", "");
   escapedData = escapedData.replaceAll("}", "");
   return escapedData;
}

public String convertToCSV(WordDictObj data) {
   String[] strings = data.returnStringArray();
   return Stream.of(strings)
      .map(this::escapeSpecialCharacters)
      .collect(Collectors.joining(","));
}

public void givenDataArray_whenConvertToCSV_thenOutputCreated() throws IOException {
   OutputStream csvOutputFile = new FileOutputStream("parseOutPut.csv");
   try (PrintWriter pw = (new PrintWriter(csvOutputFile, true, StandardCharsets.UTF_8))) {
      dataLines.stream()
         .map(this::convertToCSV)
         .forEach(pw::println);

   }
}

我检查了一下,它在google工作表中和在我的IDE中以CSV格式查看时都很好用(我选择逗号作为值分隔符)。显然它只是在excel中不起作用。而且在excel中它不显示特殊字符。
在Google Sheet中是什么样子:

在Notepad++中的外观:

如何在Excel中使用:

8wtpewkr

8wtpewkr1#

在你附上的notepad++截图中,各行看起来完全没问题,事实上,字段之间用逗号隔开了。另外,google sheets看起来也运行得很好。因此,这很可能是excel的问题。
正如g00se在评论中指出的那样,看起来您必须指定编码。

相关问题