我有以下代码:
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}是实际的制表符。你能解释我的代码有什么问题吗?
答案 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);