如何在Java中从文件中删除换行符?

2022-08-31 05:13:52

我如何以一种适用于Windows和Linux的方式替换Java中字符串中的所有换行符(即没有特定于操作系统的回车/换行/换行/新行等问题)?

我试过(注意 readFileAsString 是一个将文本文件读入字符串的函数):

String text = readFileAsString("textfile.txt");
text.replace("\n", "");

但这似乎不起作用。

如何做到这一点?


答案 1

您需要设置为的结果:texttext.replace()

String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");

这是必要的,因为字符串是不可变的 - 调用不会更改原始字符串,而是返回已更改的新字符串。如果未将结果分配给 ,则该新字符串将丢失并回收垃圾。replacetext

至于为任何环境获取换行符字符串 - 可以通过调用 .System.getProperty("line.separator")


答案 2

如其他答案中所述,您的代码无法正常工作主要是因为不会更改目标 。(它不能 - Java字符串是不可变的!实际操作是创建并返回一个新对象,其中的字符根据需要进行了更改。但是你的代码然后扔掉了那个...String.replace(...)StringreplaceStringString


以下是一些可能的解决方案。哪一个最正确取决于你到底想做什么。

// #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) 行终止符,因此我们需要注意不要将其替换为两个空格。