views:

163

answers:

3

I want the text "REPLACEME" to be replaced with my StringBuffer symbols. When I print symbols, it is a valid string. When I print my query, it still has the text REPLACEME instead of symbols. Why?

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;
        }
+8  A: 

change to:

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

replaceAll() does not replace the characters in the current string, but returns a string with the characters replaced.

Thierry-Dimitri Roy
Also note, strings are immutable in Java. You can NEVER change a string in place.
Taylor Leese
+3  A: 

Read the documentation :) replaceAll() returns a new String, it does replace inside the existing String. The reason for that is that Strings are immutable objects.

Romain Guy
+4  A: 

The String object in Java is immutable. The replaceAll will not replace the data in the string, it will generate a new string. Try this:

query = query.replaceAll("REPLACEME", symbols.toString());
Dante617
+1 for mentioning the immutability of String.
DJClayworth