String的替换all正在替换none

时间:2012-02-09 19:19:07

标签: java string replaceall

我有以下代码:

System.out.println("Trace: #" +"2");
System.out.println(rv); 
        rv.replaceAll("$t",sTAB);
System.out.println("Trace: #" +"3");
System.out.println(rv); 

rv和sTAB是String类型。并且sTAB具有制表符的值。输出如下:

Trace: #2
is$thi$t
Trace: #3
is$thi$t

但我希望:

Trace: #2
is$thi$t
Trace: #3
is{tab}hi{tab}    

当然,{tab}是实际的制表符。你能解释我的代码有什么问题吗?

4 个答案:

答案 0 :(得分:6)

replaceAll()采用正则表达式返回替换后的String

$是与行尾相匹配的正则表达式meta character

尝试使用:

rv = rv.replaceAll("\\$t", sTAB);

答案 1 :(得分:2)

Java String是不可变的。一旦你有String它就不会改变。 replaceAll实际上会返回带有替换的新字符串。

你应该做

rv = rv.replaceAll("$t",sTAB);

另请注意,replaceAll采用正则表达式。您应该逃避$

rv = rv.replaceAll("\\$t", sTAB);

答案 2 :(得分:0)

没有

rv = rv.replaceAll("$t",sTAB);

答案 3 :(得分:0)

您需要重新分配字符串rv = rv.replaceAll("$t",sTAB);