4

重複を削除せずに文字列の一部を置き換える必要があるプログラムを作成しているため、適切に機能しないreplaceFirst()を使用しています。

入力:

lock: "O_2_^-^"
str:  " O_2_^-^ " 

コード:

System.out.println(str);
System.out.println(lock);
System.out.println(str.contains(lock));
str = str.replaceFirst(lock, "");
System.out.println(str);

出力:

 O_2_^-^ 
O_2_^-^
true
 O_2_^-^ 

上記は私のプログラムからの実際の出力です。私の現在の状況では replace() メソッドは機能しませんが、テストしたところ、正しいように出力が完全に異なります。

入力:

lock: "O_2_^-^"
str:  " O_2_^-^ " 

コード:

System.out.println(str);
System.out.println(lock);
System.out.println(str.contains(lock));
str = str.replace(lock, "");
System.out.println(str);

出力:

 O_2_^-^ 
O_2_^-^
true
  //empty line of output because string was detected and removed.

私は独自の replaceFirst() メソッドを作成する以外にすべてを試しましたが、誰かが素晴らしいアドバイスや意見を持っている場合は. ありがとう!

4

3 に答える 3

7

replaceFirstの最初のパラメーターは正規表現と見なされるため、特殊文字をエスケープする必要があります。何が起こるか事前にわからない場合lock(ユーザー入力からの例)、 を使用Pattern.quote(lock)してエスケープできます。

この短いデモも参照してください。

于 2013-05-21T18:55:10.937 に答える
5

replaceFirst(String regex, String replacement)正規表現をパラメーターとして取ります。これを使用します。

String lock = "O_2_\\^-\\^";

String lock = "O_2_\\^-\\^";
String str = " O_2_^-^ "; 
System.out.println(str);
System.out.println(lock);
System.out.println(str.contains(lock));
str = str.replaceFirst(lock, "");
System.out.println(str);

出力:

O_2_^-^ 
O_2_\^-\^
false
于 2013-05-21T18:50:59.110 に答える
4

replaceFirst正規表現が必要です。したがって、それに応じて文字列をエスケープする必要があります。

PS: 置換する文字列が動的である場合は、 を使用Pattern.quote(String)してエスケープできます。

于 2013-05-21T18:49:20.150 に答える