Java заменяет все символом новой строки - PullRequest
4 голосов
/ 16 декабря 2010

символ новой строки \ n доставляет мне немало хлопот, когда я пытаюсь обнаружить и заменить его: Это прекрасно работает:

String x = "Bob was a bob \\n";
String y = x.replaceAll("was", "bob");
System.out.println(y);

, но этот код не дает желаемого результата

String x = "Bob was a bob \\n";
String y = x.replaceAll("\n", "bob");
System.out.println(y);

Ответы [ 6 ]

8 голосов
/ 16 декабря 2010

"Bob was a bob \\n" становится буквально Bob was a bob \n

Нет новой строки для замены во входной строке.Вы пытаетесь заменить символ новой строки или escape-последовательность \\n?

3 голосов
/ 16 декабря 2010

Это работает как ожидалось.

String str = "A B \n C";
String newStr = str.replaceAll("\\n","Y");
System.out.println(newStr);

Печать: -

A B Y C
1 голос
/ 16 декабря 2010
String x = "Bob was a bob \\n";
String y = x.replaceAll("was", "bob");
System.out.println(y);

одна проблема здесь: "\ n" не является символом новой строки. Должно быть:

String x = "Bob was a bob \n";// \n is newline symbol, on window newline is \r\n
0 голосов
/ 16 декабря 2010

ОБНОВЛЕНО:

Я изменил его для работы с несколькими вхождениями \ n.Обратите внимание, что это может быть не очень эффективно.

public static String replaceBob(String str,int index){
    char arr[] = str.toCharArray();
    for(int i=index; i<arr.length; i++){
        if( arr[i]=='\\' && i<arr.length && arr[i+1]=='n' ){
            String temp = str.substring(0, i)+"bob";
            String temp2 = str.substring(i+2,str.length());
            str = temp + temp2;
            str = replaceBob(str,i+2);
            break;
        }
    }
    return str;
}

Я пытался с этим, и это сработало

String x = "Bob was a bob \\n 123 \\n aaa \\n";
System.out.println("result:"+replaceBob(x, 0));

При первом вызове функции используйте индекс 0.

0 голосов
/ 16 декабря 2010

Ваша входная строка не содержит новой строки.Вместо этого он содержит «\ n».См. Исправленную строку ввода ниже.

String x = "Bob was a bob \n";
String y = x.replaceAll("\n", "bob");
System.out.println(y);
0 голосов
/ 16 декабря 2010

Вы пробовали это?:

x.replaceAll("\\n", "bob");

Вы должны экранировать символ новой строки перед использованием его в функции замены.

...