如何以一种在Windows和Linux上都可以使用的方式替换Java字符串中的所有换行符(即,没有特定于操作系统的回车/换行/换行等问题)?
我试过了(注意readFileAsString是一个将文本文件读入String的函数):
String text = readFileAsString("textfile.txt"); text.replace("\n", "");
但这似乎不起作用。
如何才能做到这一点?
你需要text将结果设置为text.replace():
text.replace()
String text = readFileAsString("textfile.txt"); text = text.replace("\n", "").replace("\r", "");
这是必需的,因为字符串是不可变的-调用replace不会更改原始字符串,它会返回已更改的新字符串。如果你不将结果分配给text,则该新String将会丢失并被垃圾回收。
replace
text
String
至于在任何环境下获取换行字符串-可通过调用获得System.getProperty("line.separator")。
System.getProperty("line.separator")
如其他答案中所述,你的代码无法正常运行主要是因为String.replace(...)未更改target String。(不能-Java字符串是不可变的!)replace实际上是创建并返回一个新String对象,并根据需要更改了字符。但是你的代码然后将其丢弃String…
String.replace(...)
target String
这里是一些可能的解决方案。哪一个最正确取决于你要尝试执行的操作。
// #1 text = text.replace("\n", "");
只需删除所有换行符。这不适用于Windows或Mac线路终端。
// #2 text = text.replace(System.getProperty("line.separator"), "");
删除当前平台的所有行终止符。这不适用于你尝试在Windows上处理(例如)UNIX文件的情况,反之亦然。
// #3 text = text.replaceAll("\\r|\\n", "");
删除所有Windows,UNIX或Mac行终止符。但是,如果输入文件是文本,则将单词连接起来;例如
Goodbye cruel world.
变成
Goodbye cruelworld.
因此,你实际上可能想要这样做:
// #4 text = text.replaceAll("\\r\\n|\\r|\\n", " ");
用空格替换每个行终止符。从Java 8开始,你还可以执行以下操作:
// #5 text = text.replaceAll("\\R", " ");
如果要用一个空格替换多个行分隔符:
// #6 text = text.replaceAll("\\R+", " ");