2010-12-16 16 views
4

私はそれを検出して交換しようとすると、改行記号\ nは私のトラブルのビットを引き起こしている: これは正常に動作します:のJavaでReplaceAll

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

答えて

8

"Bob was a bob \\n"は、入力文字列に置換するための何の改行はありません文字通りBob was a bob \n

になります。改行文字またはエスケープシーケンス\\nを置き換えようとしていますか?

+0

私は新しい行を別の文字列、たとえば "A B \ n C"が "A B Y C"になるように置き換えようとしています – Kay

+3

私が言ったように、あなたの入力文字列には改行文字はありません。 –

+4

入力文字列に改行がありません。バックスラッシュとそれに続く文字nが続きます。その間、正規表現には改行のエスケープシーケンスがありません。それは実際の改行を持っています。 –

0

あなたは、これはあなたが新しいリットルをエスケープする必要があり

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

を?:てみましたine charを使用してからreplace関数を使用します。

+0

これは悲しいことにもうまくいきません。 – Kay

+0

正規表現の文字列には、 '\ n'または' \\ n'のいずれかを使用できます。 Javaコンパイラが終了した後、正規表現コンパイラは最初のケースでは実際の改行を、2番目のケースではエスケープシーケンスのバックスラッシュ( 'n')を見ます。どちらの方法でも改行が一致します。他のいくつかが指摘しているように、それは間違っているターゲット文字列のバックスラッシュ - バックスラッシュです。 –

0

入力文字列に改行が含まれていません。代わりに "\ n"が含まれています。以下の修正された入力文字列を参照してください。

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

期待どおりに動作します。

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

プリント: - 更新され

A B Y C 
-3

:私はそれを変更した

は\ nの倍数ocurrencesで動作するように。これはあまり効率的ではないかもしれないことに注意してください。

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

なぜdownvote? – Enrique

+3

理由を選ぶ:1.)それは必要以上に複雑です。 2)それはひどく非効率的です。 3)それはgratuitously再帰的です。 4) 'if'条件にoff-by-oneエラーがあります。 5.) 'if'ブロックの中でoff-by-twoエラーが続きます。 6.)は、StringBuilderの代わりに文字列連結を使用します。または7.)それはOPの問題を解決しません。これは、文字列に含まれていない文字列の改行を置換しようとしていることです。 –

1
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