我如何替换所有的换行符从一个字符串在Java在这样的方式,将工作在Windows和Linux(即没有具体的操作系统的回车/换行/新行等问题)?
我尝试过(注意readFileAsString是一个将文本文件读入String的函数):
String text = readFileAsString("textfile.txt");
text.replace("\n", "");
但这似乎并不奏效。
如何做到这一点呢?
我如何替换所有的换行符从一个字符串在Java在这样的方式,将工作在Windows和Linux(即没有具体的操作系统的回车/换行/新行等问题)?
我尝试过(注意readFileAsString是一个将文本文件读入String的函数):
String text = readFileAsString("textfile.txt");
text.replace("\n", "");
但这似乎并不奏效。
如何做到这一点呢?
当前回答
正如在其他回答中提到的,您的代码无法工作,主要是因为String.replace(…)没有更改目标String。(不能——Java字符串是不可变的!)replace实际上所做的是创建并返回一个新的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", " ");
它将每个行结束符替换为space1。从Java 8开始,你也可以这样做:
// #5
text = text.replaceAll("\\R", " ");
如果你想用一个空格替换多个行结束符:
// #6
text = text.replaceAll("\\R+", " ");
1 -注意,第3条和第4条之间有细微的区别。序列\r\n表示单个(Windows)行结束符,因此我们需要注意不要将其替换为两个空格。
其他回答
String text = readFileAsString("textfile.txt").replaceAll("\n", "");
尽管在oracle网站中trim()的定义是 返回字符串的副本,省略前导和尾随空格。
文档没有说明新的行字符(前导和后尾)也将被删除。
简而言之 字符串文本= readFileAsString("textfile.txt").trim();对你也有用。 (用java6核对)
正如在其他回答中提到的,您的代码无法工作,主要是因为String.replace(…)没有更改目标String。(不能——Java字符串是不可变的!)replace实际上所做的是创建并返回一个新的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", " ");
它将每个行结束符替换为space1。从Java 8开始,你也可以这样做:
// #5
text = text.replaceAll("\\R", " ");
如果你想用一个空格替换多个行结束符:
// #6
text = text.replaceAll("\\R+", " ");
1 -注意,第3条和第4条之间有细微的区别。序列\r\n表示单个(Windows)行结束符,因此我们需要注意不要将其替换为两个空格。
你需要将text设置为text.replace()的结果:
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");
这是必要的,因为字符串是不可变的——调用replace并不会改变原始的字符串,它会返回一个被改变的新字符串。如果不将结果赋值给文本,那么新的String将丢失并被垃圾收集。
至于为任何环境获取换行字符串——可以通过调用System.getProperty("line.separator")来获得。
str = str.replaceAll("\\r\\n|\\r|\\n", " ");
在搜索了很多之后,完美地为我工作,在其他每一行都失败了。
您可能希望使用BufferedReader读取文件。这个类可以将输入分解成单独的行,您可以随意组装这些行。BufferedReader的操作方式自动识别Linux、Windows和MacOS世界的行结束约定,而不考虑当前的平台。
因此:
BufferedReader br = new BufferedReader(
new InputStreamReader("textfile.txt"));
StringBuilder sb = new StringBuilder();
for (;;) {
String line = br.readLine();
if (line == null)
break;
sb.append(line);
sb.append(' '); // SEE BELOW
}
String text = sb.toString();
请注意,readLine()在返回的字符串中不包括行结束符。上面的代码添加了一个空格,以避免将一行的最后一个单词和下一行的第一个单词粘合在一起。