2

以前、Javaでstring.replaceAll()を問題なく使用しましたが、これに困惑しています。「/」や「$」の文字がないので、単純に機能すると思いました。これが私がやろうとしていることです:

String testString = "__constant float* windowArray";
String result = testString.replaceAll("__constant float* windowArray", "__global float* windowArray");

変数の結果は、testStringと同じように見えます。なぜ変化がないのかわかりません。助けてください。

4

4 に答える 4

7

replaceAll に渡される最初の引数は、引き続き正規表現として扱われます。*文字は特殊文字であり、大まかに言えば、文字列内の前のもの (ここでは: )tが 0 回以上存在する可能性があります。あなたがしたいことは*、正規表現のエスケープです。最初の引数は次のようになります。

"__constant float\\* windowArray"

2 番目の引数は、少なくとも目的のためには、まだ通常の文字列であるため、*そこをエスケープする必要はありません。

String result = testString.replaceAll("__constant float\\* windowArray", "__global float* windowArray");
于 2010-11-05T20:53:31.747 に答える
2

*は正規表現の数量詞です。replaceAllメソッドは正規表現を使用します正規表現の使用を避けるには、代わりにreplaceメソッドを使用してみてください。

例:

String testString = "__constant float* windowArray";
String replaceString = "__global float* windowArray";
String result = testString.replace(testString.subSequence(0, testString.length()-1), 
            replaceString.subSequence(0, replaceString.length()-1));
于 2010-11-05T21:03:34.140 に答える
2

* は正規表現の特殊文字であるため、エスケープする必要があります。

そうtestString.replaceAll("__constant float\\* windowArray", "__global float\\* windowArray");

于 2010-11-05T20:50:59.550 に答える
0
String result = testString.replaceAll("__constant float windowArray\\\\*", "__global float\\* windowArray");
于 2010-11-05T20:53:11.210 に答える