次のような文字列string
があると仮定します。
"abcd=0; efgh=1"
「abcd」を「dddd」に置き換えたいと思います。私はそのようなことをしようとしました:
string.replaceAll("abcd","dddd");
それは動作しません。助言がありますか?
編集:具体的には、Javaで作業しており、HTMLドキュメント、具体的には<script>
タグ間のコンテンツを解析しようとしています。このコンテンツを文字列に解析する方法をすでに見つけています。
if(tag instanceof ScriptTag){
if(((ScriptTag) tag).getStringText().contains("DataVideo")){
String tagText = ((ScriptTag)tag).getStringText();
}
}
次に、ある部分文字列を別の部分文字列に置き換える方法を見つけなければなりません。
replaceAll()
メソッドの戻り値を使用する必要があります。 replaceAll()
は、現在の文字列の文字を置き換えません。新しい文字列を返します。
- 文字列オブジェクトは不変であり、作成後に値を変更することはできません。
- 正規表現が不要な場合は、replaceAll()の代わりにreplace()を使用できます。
String str = "abcd=0; efgh=1";
String replacedStr = str.replaceAll("abcd", "dddd");
System.out.println(str);
System.out.println(replacedStr);
出力
abcd=0; efgh=1
dddd=0; efgh=1
注意すべき2つのこと:
String#replace(String)
を呼び出すだけで仕事ができます。したがって、次のコードを使用します。
String replaced = string.replace("abcd", "dddd");
次のように、新しい値を割り当てる変数を作成する必要があります。
String str = string.replaceAll("abcd","dddd");
正規表現では、これはJavaだと思います。メソッドreplaceAll()
は、サブストリングが置換された新しいストリングを返すので、これを試してください:
String teste = "abcd=0; efgh=1";
String teste2 = teste.replaceAll("abcd", "dddd");
System.out.println(teste2);
出力:
dddd=0; efgh=1
置換文字列のバックスラッシュ(
\
)とドル記号($
)により、結果がリテラル置換文字列として扱われている場合とは異なる場合があることに注意してください。Matcher.replaceAll
を参照してください。必要に応じてMatcher.quoteReplacement(Java.lang.String)
を使用して、これらの文字の特別な意味を抑制します。
javadoc から。
Javascriptの場合:
var str = "abcdaaaaaabcdaabbccddabcd";
document.write(str.replace(/(abcd)/g,"----"));
//example output: ----aaaaa----aabbccdd----
他の言語では、似たようなものになります。グローバル一致を有効にすることを忘れないでください。
おそらく、交換を行った後、または間違ったものを交換した後、それを割り当てていないのでしょう。試してください:
String haystack = "abcd=0; efgh=1";
String result = haystack.replaceAll("abcd","dddd");