6

有人能解释一下为什么这段代码不打印数字吗?

      String text = new String("SomeString");
      for (int i=0; i<1500; i++) {
                text = text.concat(i+"");
      }
      System.out.println(text);

结果

      SomeString

如果我将运行次数降低到 1000 次,它会起作用,为什么?!而且,如果我不仅添加一个数字,还添加一个字符,它就可以工作。

好的新更新:

感谢您的代码示例。我尝试了所有这些,但我发现控制台
实际上显示了数字,但仅以白色字体显示。但是字符串的第一部分 SomeString是黑色的。

我使用 jdk1.7.0_06 !

4

5 回答 5

6

这是日食错误。固定宽度控制台修复了输出。

于 2012-08-30T13:43:48.103 回答
0

String.concat()接受一个String参数。

如果您添加“数字和字符”,则您添加的是字符串,因为+操作员知道您正在链接字符串和数字数据。

无论如何,代码对我来说运行良好,数字按预期附加到 1499。

于 2012-08-30T13:03:57.340 回答
0

您可以尝试几件事。我会给你一个两者的例子。

首先,在 Java 中,您可以简单地将字符串相加。int应该自动转换的原语:

  String text = new String("SomeString");

  for (int i = 0; i < 1500; i++) {
            text += i;
  }

  System.out.println(text);

其次,如果第一种方法仍然对您不起作用,那么您可以尝试将您的显式转换intString这样的:

  String text = new String("SomeString");

  for (int i = 0; i < 1500; i++) {
            text += Integer.toString(i);
  }

  System.out.println(text);
于 2012-08-30T13:03:59.760 回答
0

更有效地做同样的事情

  StringBuilder text = new StringBuilder("SomeString");
  for (int i = 0; i < 1500; i++) {
        text.append(i);
  }
  System.out.println(text);

这两个示例都适用于 Java 6 update 32 和 Java 7 update 3。

于 2012-08-30T13:05:42.427 回答
0

哇,这很奇怪。我得到了同样的结果。乍一看,它看起来像是 JVM 中的一个错误,但我尝试从命令行运行该程序,它运行良好。它一定是 Eclipse 控制台中的错误。我发现将控制台更改为固定宽度可以解决显示问题。

我还发现,如果你i + ""i + ","它替换它就可以了。似乎 Eclipse 控制台不喜欢长时间连续显示纯数字。

    String text = "SomeString";
    for (int i = 0; i < 15000; i++) {
        // text = text.concat(i + "");  // Doesn't display correctly
        // text += i;                   // Doesn't display correctly
        text = text.concat(i + ",");    // Displays correctly
        // text += i + ",";             // Displays correctly
    }
    System.out.println(text);

这个错误让我有些担心。好发现!

更新:我尝试打印一长行“xxxxxx”,发现最多可以正确显示 32000 个字符。当该行转到 32001 时,它不会显示。当我输入 "12345" + "xxxxxxxxx..." 时,我仍然可以显示 32000 个 "x" 字符,这意味着行长超过了 32000,所以它与总行长无关。似乎与 String 对象的部分长度有关。

于 2012-08-30T13:11:19.687 回答