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

从Java字符串中删除行尾字符,java,string,end-of-line,Java,String,End Of Line,我有这样的绳子 "hello java book" 我想从字符串(hello\r\njava\r\nbook)中删除\r和\n。我希望结果是“hellojavabook”。如何执行此操作?给定字符串str: str = str.replaceAll("\\\\r","") str = str.replaceAll("\\\\n","") 您是否尝试使用该方法用空字符串替换\n或\r出现的任何字符?Regex和replaceAll public class Main { public

我有这样的绳子

"hello
java
book"
我想从
字符串(hello\r\njava\r\nbook)
中删除
\r
\n
。我希望结果是
“hellojavabook”
。如何执行此操作?

给定字符串str:

str = str.replaceAll("\\\\r","")
str = str.replaceAll("\\\\n","")
您是否尝试使用该方法用空字符串替换\n或\r出现的任何字符?

Regex和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", "");

如果要避免使用正则表达式,或者必须以较早的JVM为目标,String.replace()将执行以下操作:

要移除CRLF对,请执行以下操作:

str=str.replace("\r\n","");
后者比构建正则表达式来做同样的事情更有效。但我认为前者作为正则表达式会更快,因为字符串只解析一次。

静态字节[]丢弃空格(字节[]数据){
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;
}
byte-groomedData[]=新字节[data.length]; int字节=0; 对于(int i=0;i
在commons编解码器项目中找到代码。

是否尝试过

string.trim(); 
这意味着在字符串中的空格时修剪所有前导和倾斜。希望这有帮助

编辑:(我不够明确)

因此,当您使用string.split()时,将有一个字符串[]-对于数组中的每个字符串,执行string.trim()并将其追加

String[] tokens = yourString.split(" ");
StringBuffer buff = new StringBuffer();
for (String token : tokens)
{
  buff.append(token.trim());
}
使用stringBuffer/Builder,而不是在同一字符串中追加

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

在正则表达式中添加表格也很有用。

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

str = str.replaceAll("\\r\\n|\\r|\\n", " ");
上面的代码行将在Mac、Windows和Linux中用空格替换换行符。 也可以使用行分隔符。它适用于所有操作系统。下面是行分隔符的代码段

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

您可以使用
org.apache.commons.text.StringEscapeUtils
中的
unescapeJava
,如下所示

str = "hello\r\njava\r\nbook";
StringEscapeUtils.unescapeJava(str);

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

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

这是一种不必要的低效方法。这里的问题是什么?Trim删除所有内容,只返回字符串?Trim删除前导/尾随空格。字符串中线的断线不会被删除。我建议您使用“<代码> Stry.GETFACTS(“Leal.S隔其器”);<代码>,而不是硬编码线路断路器。每个操作系统都有自己的行分隔符。@GGrec有时文本字符串/文件不是由同一操作系统生成的。所以
System.getProperty(“line.separator”)在这些情况下不起作用。但是,是的,如果您可以信任相同的OS源,那么最好使用system属性。您将如何使用为
line.separator
返回的值?我试着在正则表达式中传递
“\\”+lineSeparator
,但它不起作用。我认为str=srt.trim()也可以使用fineStringUtils.chomp()这是不推荐的
String chomp = StringUtils.normalizeSpace(sentence.replaceAll("[\\r\\n]"," "));