当此代码运行时,它会获取网页的内容。
我希望连接整个字符串而不是将其打印到控制台,但是当我取消注释下面代码中的两行时,System.out.println(inputLine);
不打印任何内容(但它与下面注释的行一起使用)和值{ {1}},
这个错误来自哪里?
fileText = null
答案 0 :(得分:11)
String
不可变,concat()将返回新的String
(请查看链接的文档),但您没有收集。
你应该使用StringBuilder来有效地构建一个字符串,然后在你完成后调用toString()
来得到一个字符串。
e.g。
StringBuilder sb = new StringBuilder();
while (....) {
sb.append("more string data");
}
String str = sb.toString();
你可以追加Strings
例如
str = str + "more string data";
但由于String
的实施,效率不高。构建StringBuilder
是为了有效地执行连接。如果您了解正在构建的StringBuilder
的大小,则可以通过其初始容量调整String
。
您可能会看到某些来源引用StringBuffer
。这是非常相似的,除了它更旧并默认同步其方法。在一个浪费的非线程环境中,一般的建议是更喜欢StringBuilder
。
答案 1 :(得分:7)
String
是不可变对象。您需要将连接值重新分配给字符串对象。只需拨打fileText.concat(inputLine);
即可更改fileText
中的值。
fileText = fileText.concat(inputLine);
简单地说,fileText += inputLine;
也应该有用。
答案 2 :(得分:5)
String
是不可变的,因此只需在concat
上调用String
就不会更改它:它会返回一个新的String
结果
您可以改为重新分配结果:fileText = fileText.concat(inputLine);
,但最好使用StringBuilder
进行连接,并从String
获得StringBuilder
。< / p>
答案 3 :(得分:4)
您好,您必须将fileText.concat(String)的返回值赋给变量。在你的情况下再次fileText。 您的解决方案是:
fileText = fileText.concat(inputLine);
进一步了解Java API - &gt; http://docs.oracle.com/javase/6/docs/api/index.html?java/lang/String.html
答案 4 :(得分:2)
String
是不可变的。这意味着fileText.concat(inputLine);
不会更改fileText
的内容。相反,concat()
方法返回带有预期数据的新String
。您需要捕获此返回值以获得所需内容。
答案 5 :(得分:1)
将fileText.concat(inputLine)
更改为fileText = fileText.concat(inputLine)
。
此外,初始化String inputLine = null;
答案 6 :(得分:1)
你应该更好地使用StringBuilder
。像
StringBuilder sb = new StringBuilder();
while (...)
sb.append(line);
它比重复连接String
更有效率。
更简单的解决方案是使用Apache Commons IO library,特别是IOUtils.toString(InputStream,String)。