一尘不染

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

java

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

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

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

但这似乎不起作用。

如何才能做到这一点?


阅读 870

收藏
2020-03-13

共2个答案

一尘不染

你需要text将结果设置为text.replace()

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

这是必需的,因为字符串是不可变的-调用replace不会更改原始字符串,它会返回已更改的新字符串。如果你不将结果分配给text,则该新String将会丢失并被垃圾回收。

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

2020-03-13
一尘不染

如其他答案中所述,你的代码无法正常运行主要是因为String.replace(...)未更改target String。(不能-Java字符串是不可变的!)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", " ");

用空格替换每个行终止符。从Java 8开始,你还可以执行以下操作:

// #5
text = text.replaceAll("\\R", " ");

如果要用一个空格替换多个行分隔符:

// #6
text = text.replaceAll("\\R+", " ");
2020-03-13