Удалить символы конца строки из строки Java

У меня есть такая строка

"hello
java
book"

Я хочу удалить \r и \n из строки (привет \r\njava\r\nbook). Я хочу строку как "hellojavabook". Как я могу это сделать?

12 ответов

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

Также было бы полезно добавить табуляцию в регулярные выражения.

Если вы хотите избежать регулярного выражения или должны использовать более раннюю JVM, String.replace() сделает:

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

И удалить пару CRLF:

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

Последнее более эффективно, чем построение регулярных выражений, чтобы сделать то же самое. Но я думаю, что первый будет быстрее в качестве регулярного выражения, поскольку строка анализируется только один раз.

Учитывая строку Str:

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

Вы можете напрямую передать терминатор строки, например, \ n, если вы знаете терминатор строки в Windows, Mac или UNIX. В качестве альтернативы вы можете использовать следующий код для замены разрывов строк в любой из трех основных операционных систем.

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

Над строкой кода заменит разрывы строк пробелами в Mac, Windows и Linux. Также вы можете использовать разделитель строк. Это будет работать для всех ОС. Ниже приведен фрагмент кода для разделителя строк.

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

Ты можешь использовать unescapeJava от org.apache.commons.text.StringEscapeUtils как ниже

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

Вы пытались использовать метод replaceAll для замены любого вхождения \n или \r пустой строкой?

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.

я пошел с \\s+и он удалил \rа также \nсимволы для меня.

\s+будет соответствовать одному или нескольким символам пробела

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

Обратитесь к выражениям Regex в Java, \\s vs. \\s+ для получения подробной информации.

Эй, мы также можем использовать это решение для регулярных выражений.

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

Попробуйте код ниже. У меня это сработало.

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

Ты пробовал

string.trim(); 

Это предназначено, чтобы урезать все ведущие и наклоняющиеся в то время как места в последовательности. Надеюсь это поможет.

Изменить: (Я не был достаточно явным)

Итак, когда вы используете string.split(), у вас будет строка [] - для каждой из строк в массиве выполните string.trim() и затем добавьте ее.

String[] tokens = yourString.split(" ");
StringBuffer buff = new StringBuffer();
for (String token : tokens)
{
  buff.append(token.trim());
}

Используйте stringBuffer/Builder вместо добавления в той же строке.

Другие вопросы по тегам