我试图弄清楚如何从使用以下代码的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();
}
}
上下文
我正在使用Microsoft访问(.mdb)文件中的{{3}}生成CSV文件。当我生成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'
任何帮助将不胜感激。
答案 0 :(得分:3)
字符串是不可变的,因此.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(在文本文件中开始一个新行)。