从CSV读取字符串replaceAll替换\r\n失效,疑与fieldSet.readString有关?
问题:CSV读取字符串时换行替换失效?
我从CSV文件读取字符串的代码如下:
BenFeature = fieldSet.readString("ben_feature").replaceAll("\r\n","\n");
文件中ben_feature字段内容为"Testing \r\n working \r\n",期望输出是换行显示:
Testing
working
但实际输出仍保留\r\n。不过用模拟字符串测试时,这段代码能正常工作:
String testing = "Testing \r\n Working \r\n"; testing = testing.replaceAll("\r\n","\n");
请问是不是fieldSet.readString方法导致的问题?
分析与解决
大概率是fieldSet.readString的处理逻辑导致的问题——毕竟模拟字符串测试时replaceAll的逻辑完全正常,说明替换代码本身没问题。
可能的原因:
- 从CSV读取时,
fieldSet.readString对字段中的转义字符做了特殊处理,把文件里的\r\n转成了字面量的\r和\n字符的转义形式(也就是字符串实际存储的是\\r\\n,而非换行符本身)。这时候用"\r\n"去匹配自然找不到目标内容。
验证方法:
可以先打印读取后的BenFeature的字符详情,或者直接尝试用下面的代码替换:
BenFeature = fieldSet.readString("ben_feature").replaceAll("\\\\r\\\\n", "\n");
如果这样能正常替换,就说明确实是读取时转义了字面量的换行符。
解决思路:
- 查看
fieldSet.readString的官方文档或源码,明确它对CSV中特殊字符(换行、转义符)的处理规则。 - 如果是转义导致的字面量问题,就用
replaceAll("\\\\r\\\\n", "\n")做替换;或者用更通用的写法兼容所有换行格式:
BenFeature = fieldSet.readString("ben_feature").replaceAll("\\r?\\n", "\n");
这个写法会把单独的\r、\n以及\r\n都统一替换成\n。
内容的提问来源于stack exchange,提问作者raksha n
相关产品推荐
相关产品推荐

