我如何替换所有的换行符从一个字符串在Java在这样的方式,将工作在Windows和Linux(即没有具体的操作系统的回车/换行/新行等问题)?

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

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

但这似乎并不奏效。

如何做到这一点呢?


当前回答

该函数将所有空格(包括换行符)归一化为单个空格。不完全是最初的问题所要求的,但在许多情况下可能恰恰是需要的:

import org.apache.commons.lang3.StringUtils;

final String cleansedString = StringUtils.normalizeSpace(rawString);

其他回答

您可以使用apache公共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);

在Kotlin和Java 11中,String有lines()方法,它返回多行字符串中的行列表。 你可以得到所有的行,然后将它们合并成一个字符串。

使用Kotlin,这将非常简单

str.lines().joinToString("")

如果你只想删除当前操作系统上有效的行结束符,你可以这样做:

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

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

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

或者,稍微啰嗦一点,但不那么regexy:

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

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

可以使用泛型方法用任意字符替换任意字符。

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++;
    }

}