如何在Java中从文件中删除换行符?
我如何以一种适用于Windows和Linux的方式替换Java中字符串中的所有换行符(即没有特定于操作系统的回车/换行/换行/新行等问题)?
我试过(注意 readFileAsString 是一个将文本文件读入字符串的函数):
String text = readFileAsString("textfile.txt");
text.replace("\n", "");
但这似乎不起作用。
如何做到这一点?
我如何以一种适用于Windows和Linux的方式替换Java中字符串中的所有换行符(即没有特定于操作系统的回车/换行/换行/新行等问题)?
我试过(注意 readFileAsString 是一个将文本文件读入字符串的函数):
String text = readFileAsString("textfile.txt");
text.replace("\n", "");
但这似乎不起作用。
如何做到这一点?
您需要设置为的结果:text
text.replace()
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");
这是必要的,因为字符串是不可变的 - 调用不会更改原始字符串,而是返回已更改的新字符串。如果未将结果分配给 ,则该新字符串将丢失并回收垃圾。replace
text
至于为任何环境获取换行符字符串 - 可以通过调用 .System.getProperty("line.separator")
如其他答案中所述,您的代码无法正常工作,主要是因为不会更改目标 。(它不能 - Java字符串是不可变的!实际操作是创建并返回一个新对象,其中的字符根据需要进行了更改。但是你的代码然后扔掉了那个...String.replace(...)
String
replace
String
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", " ");
它将每个行终止符替换为空格1。从Java 8开始,你也可以这样做:
// #5
text = text.replaceAll("\\R", " ");
如果要将多行终止符替换为一个空格:
// #6
text = text.replaceAll("\\R+", " ");
1 - 请注意,#3和#4之间存在细微的区别。序列 \r\n
表示单个 (Windows) 行终止符,因此我们需要注意不要将其替换为两个空格。