Удалить символы конца строки из строки Java - PullRequest
59 голосов
/ 27 февраля 2009

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

"hello
java
book"

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

Ответы [ 9 ]

122 голосов
/ 27 февраля 2009

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", "");
14 голосов
/ 27 февраля 2009

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

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

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

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

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

11 голосов
/ 12 ноября 2013
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);
}

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

4 голосов
/ 27 февраля 2009

Имеется строковая строка:

str = str.replaceAll("\\\\r","")
str = str.replaceAll("\\\\n","")
2 голосов
/ 27 февраля 2009

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

1 голос
/ 04 января 2019

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

str = "hello\r\njava\r\nbook";
StringEscapeUtils.unescapeJava(str);
1 голос
/ 20 сентября 2010
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;
}

Код найден в проекте общего кодека.

0 голосов
/ 25 октября 2018

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

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

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

String lineSeparator=System.lineSeparator();
String newString=yourString.replace(lineSeparator, "");
0 голосов
/ 23 августа 2012

Вы пробовали

string.trim(); 

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

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

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

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

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

...