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"

第二个参数是,至少对于您的目的,仍然只是一个普通的字符串,所以您不需要在*那里转义。

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

您需要转义 * 因为它是正则表达式中的特殊字符。

所以testString.replaceAll("__constant float\\* windowArray", "__global float\\* windowArray");

于 2010-11-05T20:50:59.550 回答
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 回答
0
String result = testString.replaceAll("__constant float windowArray\\\\*", "__global float\\* windowArray");
于 2010-11-05T20:53:11.210 回答