2

こんにちは私は文字列内の次の文字を置き換えたいです

String a = "20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A";    
System.out.println(a);
String x  = a.replaceAll("~^", "");
System.out.println(x);

ただし、私の出力は次のとおりです。

20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A
20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A

明らかに何かが起きています!

私はエスケープ文字でそれを実行しました:

 String x  = fix.replaceAll("\\~^", "\\");

それでも同じ出力。〜私が知らないことに関連する何かがありますか?

私は同じことをしなければなりません:

〜!〜^

〜!

すべて同じ文字列内にある図3.replaceAllが最初に最も長く、次に他の2つ。しかし、私は最も簡単に作業することさえできません:S

編集済み:何らかの理由で削除されました

Edit2:〜^を[]に似た文字ボックスに置き換える必要があります

4

3 に答える 3

5

私が言えることから、正規表現はまったく必要ありませんか?

正規表現が必要ない場合は、replace代わりに使用できます。replaceAllこれにより、すべてのオカレンスが置き換えられますが、最初の引数は正規表現として解釈されません(String.replaceを参照) 。

String a = "20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A";    
System.out.println(a);
String x  = a.replace("~^", "");
System.out.println(x);

これは出力します:

20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A
20001=EDTS20002=USA20003=117087187520004=120005=0773=665=453=2448=0A
于 2011-06-16T09:42:28.857 に答える
2

は入力文字列の^先頭と一致するため、正規表現~^はおそらく何にも一致しません。リテラルと一致させるには、エスケープする必要があります"^"

String x  = a.replaceAll("~\\^", "");

~は特殊文字ではなく、エスケープする必要がないことに注意してください。

~!または、~!~^を交換したい場合は~^、一度に試してみてください。

String x  = a.replaceAll("~!~\\^|~!|~\\^", ""); 
于 2011-06-16T09:36:23.243 に答える
1

正規表現の^は行の始まりを意味するので、Javaがそれをそのように解釈していると思います。その場合、パターンは何にも一致しません。バックスラッシュでエスケープする必要があります。Javaを通過するには2倍にする必要があるため、「〜\\^」です。

于 2011-06-16T09:38:48.257 に答える