gpt4 book ai didi

java - 如何使用 Java 从独立于平台的文本文件中删除 ^M 字符?

转载 作者:搜寻专家 更新时间:2023-11-01 02:59:06 27 4
gpt4 key购买 nike

我正在尝试找出如何从使用以下代码从 Java 代码生成的文本文件中删除 ^M 个字符。

   public StringBuilder toCsv(Table table) {
StringBuilder stringBuilder = new StringBuilder();
String csv = new String();
for (Column cName : table.getColumns()){
csv += QUOT;
csv += cName.getName();
csv += QUOT;
csv += CSV_SEPERATOR;
}

csv += "\n";
stringBuilder.append(csv);

for (Row row : table) {
Collection<Object> values = row.values();
String csvString = "";
if (values.size() == 10) {
String ep = QUOT + CSV_SEPERATOR + QUOT ;
csvString = StringUtils.join(row.values(),ep );
csvString.replaceAll("\'", "");
csvString = QUOT + csvString + QUOT;
logger.info("line ++++ " + csvString);
}
stringBuilder.append(csvString);
stringBuilder.append("\n");
}

return stringBuilder;
}

然后我使用以下方法将数据写入文件

 public void writeCsv(String data, String path, String fileName) throws IOException {
String completePath = path + "/" + fileName;
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(completePath)));
try {
out.write(data);
} finally {
out.close();
}
}

上下文

我正在使用 http://jackcess.sourceforge.net/ 生成 CSV 文件来自 Microsoft access (.mdb) 文件。当我生成 csv 并使用 vim 打开时,我在行中间看到很多 ^M。注意:我使用的是 MacOS

我已经尝试在写入 csv 之前删除 ^M(我认为这是一个 MS Windows CARRIAGE_RETURN)

 csvLine.replaceAll("\n\r", "");

 csvLine.replaceAll("\r\n", "");

csvLine.replaceAll("\\r", "");

生成的 CSV

'10773.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'By Cash';'';'10000.0';'';'2102.0'
'10001.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'Pet Soup cash';'087470^M
^M
^M
087470';'-45000.0';'';'2102.0'
'10360.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'By Cash';'';'37000.0';'';'2101.0'
'10444.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'By Cash';'';'2000.0';'';'2101.0'

如您所见,上述 CSV 中的一行被 ^M 分隔,这不是我们想要的。 我需要以编程方式从文件中删除此类字符。

删除 ^M 和后续行后的预期输出

'10001.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'Pet Soup cash';'087470087470';'-45000.0';'';'2102.0'

任何帮助将不胜感激。

最佳答案

字符串是不可变的,所以.replaceAll方法不会改变现有String的值;它执行替换并返回一个新的 String 值。所以,

String csvString = "123,foo,234";
csvString.replaceAll("foo", "");
System.out.println(csvString);

打印

123,foo,234

显示字符串未更改。你要做的是

String csvString = "123,foo,234";
csvString = csvString.replaceAll("foo", ""); // save the new value
System.out.println(csvString);

打印

123,,234

在您的特定情况下,您似乎想要这样做

csvString = csvString.replaceAll("\r\n", "");  // save the new value

因为您要删除 两个 carriage_return(显示为 ^M)和 new_line(在文本文件中开始一个新行)。

关于java - 如何使用 Java 从独立于平台的文本文件中删除 ^M 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41424333/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com