当此代码运行时,它会获取网页的内容。
我想连接整个字符串而不是将其打印到控制台,但是当我取消注释下面代码中的两行时, System.out.println(inputLine);
不打印任何内容(但它使用下面注释的行)和值 fileText = null
,
这个错误从何而来?
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);
}
}
最佳答案
String
是不可变并且 concat()将返回一个新的String
(检查链接的文档),您不会收集该字符串。
您应该使用 StringBuilder高效地构建字符串,然后在完成后调用 toString()
以获得结果字符串。
例如
StringBuilder sb = new StringBuilder();
while (....) {
sb.append("more string data");
}
String str = sb.toString();
您可以附加字符串
例如
str = str + "more string data";
但由于String
的实现,它的效率不是很高。构建StringBuilder
是为了有效地执行连接。如果您了解要构建的 String
的大小,则可以通过其初始容量调整 StringBuilder
。
您可能会看到一些来源引用了StringBuffer
。这非常相似,只是它更旧并且默认同步其方法。在非线程环境中这是浪费的,一般建议是首选 StringBuilder
。
关于java - 为什么我的 Java 字符串连接不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905531/