java System.out.println()奇怪的行为长字符串

时间:2012-08-30 12:57:40

标签: java eclipse string println

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

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

结果

      SomeString

如果我将运行次数减少到1000就可以了,为什么?! 而且如果我不仅添加一个数字而且添加一个字符,它也可以。

确定新更新:

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

我使用jdk1.7.0_06!

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

String.concat()接受String参数。

如果添加“数字和字符”,则添加字符串,因为+运算符理解您正在链接字符串和数字数据。

无论如何,代码对我来说运行良好,数字追加到1499,如预期的那样。

答案 2 :(得分:0)

您可以尝试一些事情。我会举两个例子。

首先,在Java中,您可以简单地将字符串添加到一起。 int等基元应自动转换:

  String text = new String("SomeString");

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

  System.out.println(text);

其次,如果第一种方法仍不适合您,那么您可以尝试将int显式转换为String,如下所示:

  String text = new String("SomeString");

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

  System.out.println(text);

答案 3 :(得分:0)

更有效地做同样的事情

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

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

答案 4 :(得分: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);

这个bug对我来说有点担心。很好找!

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