replaceAll不替换字符串

时间:2010-08-31 17:36:27

标签: 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(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;
}

3 个答案:

答案 0 :(得分:18)

更改

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

为:

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

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


此外,如果您只想替换文字并且不需要正则表达式语法支持,请使用replace而不是replaceAll(正则表达式语法支持只是这两种方法之间的区别)。如果您想要替换可包含正则表达式元字符的文字,例如*+[] and others,则更安全。

答案 1 :(得分:6)

阅读文档:) replaceAll()返回一个新的String,它确实替换现有的String。原因是字符串是不可变对象。

答案 2 :(得分:5)

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

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