为什么这个Java String.replaceAll()代码不起作用?

时间:2010-11-05 20:46:43

标签: java string api replaceall

我之前在Java中使用过string.replaceAll()并没有遇到任何麻烦,但我对此感到难过。我认为它只是工作,因为没有“/”或“$”字符。这是我想要做的:

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

变量结果看起来与testString相同。我不明白为什么没有变化,请帮助。

4 个答案:

答案 0 :(得分:7)

传递给replaceAll的第一个参数仍被视为正则表达式。 *字符是一个特殊字符,大致意思是字符串中的前一个字符(此处为:t),可以有0次或更多次。你想要做的是逃避正则表达式的*。你的第一个论点看起来应该更像:

"__constant float\\* windowArray"

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

* 是正则表达量词。 replaceAll 方法使用正则表达式。要避免使用正则表达式,请尝试使用替换方法。

示例:

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));

答案 3 :(得分:0)

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