无法替换所有美元符号

时间:2012-03-13 07:30:55

标签: java

任何人都可以建议为什么我在运行此方法时用$符号替换值时会遇到bouns异常索引?

E.g。我传递了一条消息$$vmdomodm$$

message = message.replaceAll("$", "$");

我试着看看这个论坛帖子但是无法理解内容

http://www.coderanch.com/t/383666/java/java/String-replaceAll

3 个答案:

答案 0 :(得分:32)

您需要使用转义字符

这是特殊字符

尝试使用此\\$

并且在您尝试使用相同的

替换内容的代码中没有意义
String message = "$$hello world $$";
message = message.replaceAll("\\$", "_");
System.out.println(message);

<强>输出

__hello world __

<强>更新

   String message = "&#36;hello world $$";
   message = message.replaceAll("&#36;", "\\$");
   System.out.println(message);

<强>输出

 $hello world $$

答案 1 :(得分:3)

由于你没有真正使用任何正则表达式而不是replaceAll,你应该使用String#replace这样的方法:

message = message.replace("&#36;", "$");

答案 2 :(得分:0)

修改了replaceAll()之后,再也没有得到我想要的东西,我发现编写一个函数来逃避美元符号会更容易。

public static String escapeDollarSign(String value) {
    Pattern p = Pattern.compile("\\$");
    int off = 0;
    while (true) {
        Matcher m = p.matcher(value.substring(off));
        if (!m.find()) break;
        int moff = m.start();
        String left = value.substring(0, off+moff);
        String right = value.substring(off+moff+1, value.length());
        value = left+"\\$"+right;
        off += moff+1+1;
    }

    return value;
}

例如
$re$gex $can $ b$e a$ pain$
成为
\$re\$gex \$can \$ b\$e a\$ pain\$