为什么我的Java字符串连接不起作用?

时间:2012-08-10 16:15:38

标签: java string concat

当此代码运行时,它会获取网页的内容。

我希望连接整个字符串而不是将其打印到控制台,但是当我取消注释下面代码中的两行时,System.out.println(inputLine);不打印任何内容(但它与下面注释的行一起使用)和值{ {1}},

这个错误来自哪里?

fileText = null

7 个答案:

答案 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)