java System.out.println() странное поведение длинная строка

Может кто-нибудь объяснить мне, почему этот код не печатает цифры?

      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!

5 ответов

Решение

Это ошибка затмения. Консоль фиксированной ширины фиксирует вывод.

Есть пара вещей, которые вы можете попробовать. Я дам вам пример обоих.

Во-первых, в 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);

Сделать то же самое более эффективно

  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.

Вау, это странно. Я получил тот же результат. На первый взгляд, это похоже на ошибку в 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.

String.concat() принимает String параметр.

Если вы добавите "число и символ", вы добавите строку, потому что + Оператор понимает, что вы объединяете строки и числовые данные.

В любом случае код работает нормально для меня, числа, добавленные до 1499, как и ожидалось.

Другие вопросы по тегам