不能全部更换为美元符号

问题描述 投票:14回答:3

谁能告诉我,为什么我在运行这个方法以替换值时遇到index out of bouns异常?$ 符号?

例如:我传话 $$vmdomodm$$

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

我试着看了一下这个论坛的帖子,但不明白内容。

http:/www.coderanch.comt383666javajavaString-replaceAll

java
3个回答
37
投票

这是一个特殊的字符,你需要使用转义符。

用这个试试 \\$

而且你的代码也没有意义,你试图用同样的内容来替换。

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

产出

__hello world __

更新

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

产出

 $hello world $$

3
投票

因为你并没有真正使用任何regex,所以你应该使用代替replaceAll。String#replace 这样的方法。

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

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\$

© www.soinside.com 2019 - 2024. All rights reserved.