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

标签 java string concatenation

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

我想连接整个字符串而不是将其打印到控制台,但是当我取消注释下面代码中的两行时, 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/

相关文章:

java - 如何下载游戏更新?

c - 如何使用 printf 打印非空终止字符串?

c++ - 获取 unicode 代码点的大写或小写(如 uint32_t)

Python:将文件加入列表中

java - 将两个 byteBuffer 连接成一个

java - if 语句中的compareAndSet。它是原子操作吗?

java - 将值设置为 null 如何让我们避免徘徊并启用垃圾收集?

java - java中n长度的字符串

excel - 如何使用 PowerShell 插入 Excel 公式?

php - 如何在准备好的语句中使用 sql 函数 CONCAT