从Java字符串中删除行尾字符

68

我有这样的字符串

"hello
java
book"

我想从字符串String(hello\r\njava\r\nbook)中删除\r\n,并希望结果为"hellojavabook"。我该怎么做?


StringUtils.chomp() - Sagar Pilkhwal
12个回答

142

使用replaceAll的正则表达式。

public class Main
{
    public static void main(final String[] argv) 
    {
        String str;

        str = "hello\r\njava\r\nbook";
        str = str.replaceAll("(\\r|\\n)", "");
        System.out.println(str);
    }
}
如果您只想在\r和\n成对出现时删除它们(上面的代码会删除\r或\n),请改用以下代码:
str = str.replaceAll("\\r\\n", "");

8
建议使用System.getProperty("line.separator");代替硬编码的换行符。每个操作系统都有自己的换行符。 - Georgian
10
@GGrec有时文本字符串/文件不是由同一操作系统创建的。因此在这些情况下System.getProperty("line.separator");将无法工作。但是,如果您可以信任来自相同操作系统的文本,则最好使用系统属性。 - Mindwin Remember Monica
你会如何使用返回的line.separator的值?我尝试在正则表达式中传递"\\" + lineSeparator,但它没有起作用。 - Don Cheadle
否则我认为 str = srt.trim() 也可以正常工作。 - Alexis Brunet

19
public static void main(final String[] argv) 
{
    String str;

    str = "hello\r\n\tjava\r\nbook";
    str = str.replaceAll("(\\r|\\n|\\t)", "");
    System.out.println(str);
}

在正则表达式中添加制表符会很有用


18

如果你想避免正则表达式,或者必须针对早期的JVM版本,可以使用String.replace()方法:

str=str.replace("\r","").replace("\n","");

而要删除一个CRLF对:

str=str.replace("\r\n","");

相比使用正则表达式来完成同样的任务,前者更有效率。但我认为由于字符串只被解析一次,所以后者作为正则表达式会更快。


5

给定一个字符串 str:

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

7
这是一种不必要的低效做法。 - Lawrence Dol

3

如果您知道 Windows、Mac 或 UNIX 中的行终止符,可以直接传递换行符(如 \n)。或者,您可以使用以下代码替换三个主要操作系统中的换行符。

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

以上代码行将在Mac、Windows和Linux中使用空格替换换行符。 您还可以使用line-separator。它适用于所有操作系统。以下是line-separator的代码片段。

String lineSeparator=System.lineSeparator();
String newString=yourString.replace(lineSeparator, "");

2
static byte[] discardWhitespace(byte[] data) {
    byte groomedData[] = new byte[data.length];
    int bytesCopied = 0;

    for (int i = 0; i < data.length; i++) {
        switch (data[i]) {
            case (byte) '\n' :
            case (byte) '\r' :
                break;
            default:
                groomedData[bytesCopied++] = data[i];
        }
    }

    byte packedData[] = new byte[bytesCopied];

    System.arraycopy(groomedData, 0, packedData, 0, bytesCopied);

    return packedData;
}

这段代码来自commons-codec项目。


2
你尝试过使用replaceAll方法将任何出现的\n或\r替换为空字符串吗?

1
您可以像下面这样使用来自org.apache.commons.text.StringEscapeUtilsunescapeJava
str = "hello\r\njava\r\nbook";
StringEscapeUtils.unescapeJava(str);

2
已弃用 - Jinesh Mathew

1

我使用了 \s+,它帮我删除了 \r\n 字符。

\s+ 可以匹配一个或多个空白字符。

final String stringWithWhitespaceChars = "Bart\n\r";
final String stringWithoutEscapeChars = stringWithEscapeChars.replaceAll("\\s+","");

请参考Java中的正则表达式,\\s和\\s+有何不同以获取详细信息。

0

嘿,我们也可以使用这个正则表达式解决方案。

String chomp = StringUtils.normalizeSpace(sentence.replaceAll("[\\r\\n]"," "));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接