When this code runs, it gets the content of a webpage.
I wanted to concatenate that entire string rather than printing it to the console but when I uncomment the two lines in the code below, System.out.println(inputLine); prints nothing (but it worked with the line below commented) and the value fileText = null,
where does this error come from?
import java.net.*;
import java.io.*;
public class URLReader {
public static void main(String[] args) throws Exception {
URL oracle = new URL("http://www.oracle.com");
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));
String fileText = "";
String inputLine;
while ((inputLine = in.readLine()) != null)
//fileText.concat(inputLine);
System.out.println(inputLine);
in.close();
//System.out.println(fileText);
}
}
Stringis immutable and concat() will return a newString(check the linked doc), which you’re not collecting.You should make use of a StringBuilder to build a string efficiently, and then call
toString()on that once you’re complete to get he resultant String.e.g.
You can append
Stringse.g.but it’s not very efficient, due to the implementation of
String. AStringBuilderis built in order to perform concatenation efficiently. You can tune aStringBuildervia its initial capacity if you have an idea of the size ofStringyou’re building.You may see some sources refer to a
StringBuffer. That’s very similar, except it’s older and synchronises its methods by default. In a non-threaded environment that’s wasteful and the general advice is to preferStringBuilder.