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

时间:2010-01-29 15:44:52

标签: java string newline line-breaks

如何以一种可在Windows和Linux上运行的方式替换Java中字符串中的所有换行符(即没有特定于OS的回车/换行/换行等问题)?

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

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

但这似乎不起作用。

如何做到这一点?

17 个答案:

答案 0 :(得分:384)

您需要将text设置为text.replace()

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

这是必要的,因为字符串是不可变的 - 调用replace不会更改原始字符串,它会返回一个已更改的新字符串。如果您没有将结果分配给text,那么新的String将丢失并收集垃圾。

至于获取任何环境的换行符 - 可通过调用System.getProperty("line.separator")来获取。

答案 1 :(得分:196)

如其他答案中所述,您的代码主要,因为String.replace(...)不会更改目标字符串。 (它不能 - Java字符串是不可变的!)它实际上做的是创建一个新的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线路终结器。但是,如果输入文件是文本,这将连接单词; e.g。

Goodbye cruel
world.

变为

Goodbye cruelworld.

所以你可能真的想要这样做:

// #4
text = text.replaceAll("\\r\\n|\\r|\\n", " ");

用空格替换每个行终止符。

答案 2 :(得分:19)

如果只想删除当前操作系统上有效的行终止符,可以执行以下操作:

text = text.replaceAll(System.getProperty("line.separator"), "");

如果您想确保删除任何行分隔符,可以这样做:

text = text.replaceAll("\\r|\\n", "");

或者,稍微冗长,但不那么重复:

text = text.replaceAll("\\r", "").replaceAll("\\n", "");

答案 3 :(得分:10)

This function将所有空格(包括换行符)规范化为单个空格。不完全是原始问题所要求的,但在很多情况下可能完全符合要求:

import org.apache.commons.lang3.StringUtils;

final String cleansedString = StringUtils.normalizeSpace(rawString);

答案 4 :(得分:10)

str = str.replaceAll("\\r\\n|\\r|\\n", " ");

经过大量的搜索后,我完美地为我工作,但每一行都失败了。

答案 5 :(得分:9)

这个效率我想

String s;
s = "try this\n try me.";
s.replaceAll("[\\r\\n]+", "")

已编辑语法高亮显示

答案 6 :(得分:6)

在windows / linux / mac下,换行符不一样。您应该将System.getProperties与属性line.separator一起使用。

答案 7 :(得分:3)

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

.replace返回一个新字符串,Java中的字符串是不可变的。

答案 8 :(得分:3)

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

即使oracle网站中的trim()的定义是 “返回字符串的副本,省略前导和尾随空格。”

文档中没有说明新行字符(前导和尾随)也将被删除。

简而言之 String text = readFileAsString("textfile.txt").trim();也适合您。  (用Java 6检查)

答案 9 :(得分:3)

您可能希望使用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()在返回的字符串中不包含行终止符。上面的代码附加了一个空格,以避免将一行的最后一个单词和下一行的第一个单词粘在一起。

答案 10 :(得分:1)

我觉得奇怪的是(Apache)StringUtils尚未涵盖在这里。

您可以使用.replace方法从字符串中删除所有换行符(或其他任何子串的出现)

StringUtils.replace(myString, "\n", "");

此行将使用空字符串替换所有换行符。

因为换行在技术上是一个字符,您可以选择使用将替换字符的.replaceChars方法

StringUtils.replaceChars(myString, '\n', '');

答案 11 :(得分:0)

您可以使用apache commons IOUtils遍历该行并将每一行追加到StringBuilder。并且不要忘记关闭InputStream

StringBuilder sb = new StringBuilder();
FileInputStream fin=new FileInputStream("textfile.txt");
LineIterator lt=IOUtils.lineIterator(fin, "utf-8");
while(lt.hasNext())
{
  sb.append(lt.nextLine());
}
String text = sb.toString();
IOUtils.closeQuitely(fin);

答案 12 :(得分:0)

仅供参考,如果您想要使用单行中断替换同时多行广告,那么您可以使用

myString.trim().replaceAll("[\n]{2,}", "\n")

或用一个空格替换

myString.trim().replaceAll("[\n]{2,}", " ")

答案 13 :(得分:0)

您可以使用泛型方法将任何char替换为任何char。

public static void removeWithAnyChar(String str, char replceChar,
        char replaceWith) {
    char chrs[] = str.toCharArray();
    int i = 0;
    while (i < chrs.length) {

        if (chrs[i] == replceChar) {
            chrs[i] = replaceWith;
        }
        i++;
    }

}

答案 14 :(得分:0)

在 Kotlin 和 Java 11 中,Stringlines() 方法,它返回多行字符串中的行列表。 您可以获取所有行,然后将它们合并为一个字符串。

有了 Kotlin,一切都会变得如此简单

str.lines().joinToString("")

答案 15 :(得分:-1)

org.apache.commons.lang.StringUtils#chopNewline

答案 16 :(得分:-2)

尝试这样做:

 textValue= textValue.replaceAll("\n", "");
 textValue= textValue.replaceAll("\t", "");
 textValue= textValue.replaceAll("\\n", "");
 textValue= textValue.replaceAll("\\t", "");
 textValue= textValue.replaceAll("\r", "");
 textValue= textValue.replaceAll("\\r", "");
 textValue= textValue.replaceAll("\r\n", "");
 textValue= textValue.replaceAll("\\r\\n", "");