字符串#replaceAll()方法不替换$(美元)

时间:2016-03-07 10:23:20

标签: java

我已尝试使用内置方法 String#replaceAll()从我的字符串内容中替换所有" $" 。但它没有用。

String ss = "HELLO_$_JAVA";
System.out.println(ss.indexOf("$"));
System.out.println(ss);
ss = ss.replaceAll("$", "");
System.out.println(ss);// 'HELLO__JAVA' is expected

输出:

6
HELLO_$_JAVA
HELLO_$_JAVA

预期产出:

6
HELLO_$_JAVA
HELLO__JAVA

修改 尽管Java regular expressions and dollar sign涵盖了答案,但在使用 String#replaceAll()时,我的问题仍然可能对遇到同样问题的人有所帮助。 和 Difference between String replace() and replaceAll()也可能会有所帮助。

该问题的两种可能解决方案是

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

OR

ss = ss.replaceAll("\\$", "");

3 个答案:

答案 0 :(得分:8)

String.replaceAll用于正则表达式。 '$'是正则表达式中的特殊字符。

如果您不想使用正则表达式,请使用String.replace,而不是String.replaceAll

答案 1 :(得分:7)

replaceAll方法的第一个参数采用正则表达式,而不是文字字符串,而$在正则表达式中具有特殊含义。

你需要通过在它前面放一个反斜杠来逃避$;并且反斜杠需要加倍,因为它在Java字符串文字中具有特殊含义。

ss = ss.replaceAll("\\$", "");

答案 2 :(得分:-1)

可能不是最好的方法,而是一种解决方法,

public class CustomJsonObjectRequest  extends JsonObjectRequest
{
    public CustomJsonObjectRequest(int method, String url, JSONObject jsonRequest,Response.Listener listener, Response.ErrorListener errorListener)
    {
        super(method, url, jsonRequest, listener, errorListener);
    }


@Override
public Map getHeaders() throws AuthFailureError {
    Map headers = new HashMap();
    headers.put("AppId", "xyz");

    return headers;
}

}

然后连接每一个

String parts[] = ss.split("\\$");

然后在输出

中输入已替换的字符串