Java replaceAll不替换字符串

Java replaceAll不替换字符串,java,android,regex,string,stringbuffer,Java,Android,Regex,String,Stringbuffer,我希望文本“REPLACEME”替换为我的StringBuffer符号。当我打印符号时,它是一个有效字符串。当我打印查询时,它仍然有文本REPLACEME而不是符号。为什么? private String buildQuery(){ String query = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(REPL

我希望文本“REPLACEME”替换为我的StringBuffer符号。当我打印符号时,它是一个有效字符串。当我打印查询时,它仍然有文本REPLACEME而不是符号。为什么?

private String buildQuery(){
    String query = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(REPLACEME)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=";

    deserializeQuotes();

    StringBuffer symbols = new StringBuffer();
    for(int i = 0; i < quotes.size();i++){
        if(i == (quotes.size()-1))
            symbols.append("%22" + quotes.get(i).getSymbol() + "%22%"); //end with a quote
        else
            symbols.append("%22" + quotes.get(i).getSymbol() + "%22%2C");
    }

    System.out.println("***SYMBOLS***" + symbols.toString());
    query.replaceAll("REPLACEME", symbols.toString());

    return query;
}
私有字符串buildQuery(){
字符串查询=”http://query.yahooapis.com/v1/public/yql?q=select%20*%20来自%20yahoo.finance.quotes%20其中%20symbol%20in%20(REPLACEME)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=“;
反序列化引号();
StringBuffer符号=新的StringBuffer();
对于(int i=0;i
更改

query.replaceAll("REPLACEME", symbols.toString());
致:

Java中的字符串设计为。
这就是为什么
replaceAll()
无法替换当前字符串中的字符,因此它必须返回一个新的字符串并替换字符



另外,如果您只想替换文本,而不需要正则表达式语法支持,请使用
replace
而不是
replaceAll
(正则表达式语法支持只是这两种方法之间的区别)。如果您希望替换可以包含正则元字符的文本,例如
*
+
[
]
]
,请阅读文档:)replaceAll()返回一个新字符串,它会在现有字符串中进行替换。原因是字符串是不可变的对象。

Java中的字符串对象是不可变的。replaceAll不会替换字符串中的数据,它将生成一个新字符串。试试这个:

query = query.replaceAll("REPLACEME", symbols.toString());

还要注意,字符串在Java中是不可变的。您永远不能在适当的位置更改字符串。我总是忘记xD+1提到字符串的不变性。
query = query.replaceAll("REPLACEME", symbols.toString());