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!


person SVetterIO    schedule 30.08.2012    source источник
comment
У меня нормально печатает. Вы уверены, что используете тот код, о котором думаете?   -  person Peter Lawrey    schedule 30.08.2012
comment
у меня не работает, версия - java версии 1.7.0_01   -  person Nandkumar Tekale    schedule 30.08.2012
comment
@PeterLawrey: какую версию вы используете?   -  person Nandkumar Tekale    schedule 30.08.2012
comment
Java 6, обновление 32 и Java 7, обновление 3.   -  person Peter Lawrey    schedule 30.08.2012
comment
Это не проблема Java. Точно так же, как вы смотрите на результат в Eclipse...   -  person Orabîg    schedule 30.08.2012


Ответы (5)


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

person Roman C    schedule 30.08.2012
comment
у меня сработало, у других на всякий случай: правый клик в консоли, настройки. Это должен быть первый флажок под консолью. - person SketchyTurtle; 19.08.2015

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

Если вы добавляете «число и символ», вы добавляете строку, потому что оператор + понимает, что вы связываете строку и числовые данные.

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

person moonwave99    schedule 30.08.2012
comment
Вот почему OP передает i+"" в качестве параметров concat(). - person Graham Borland; 30.08.2012

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

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

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

  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.

person Peter Lawrey    schedule 30.08.2012
comment
Спасибо за исправление. Я только что узнал, что он на самом деле печатает числа, но в текстовом цвете белого цвета. Я понятия не имею, что происходит. - person SVetterIO; 30.08.2012
comment
точно, он белого цвета, в чем может быть причина? вы запускали в командной строке cmd? - person Nandkumar Tekale; 30.08.2012
comment
Когда вы пытаетесь выделить текст, вы должны его увидеть (если это белый текст на белом фоне) - person Peter Lawrey; 30.08.2012
comment
но почему первая часть SomeString черная, а цифры белые - person SVetterIO; 30.08.2012
comment
Этого не должно быть. Я могу только представить, что это ошибка в eclipse. - person Peter Lawrey; 30.08.2012

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

person ᴇʟᴇvᴀтᴇ    schedule 30.08.2012
comment
Первый вариант: вылетает или вообще нет отображения - person SVetterIO; 30.08.2012
comment
Это не крах. Он отображает SomeString. Если бы он разбился, я был бы намного счастливее. - person ᴇʟᴇvᴀтᴇ; 30.08.2012
comment
У меня сейчас цифры отображаются, а у тебя белые. Можете ли вы скопировать и вставить их? - person SVetterIO; 30.08.2012
comment
Да. Копирование и вставка работают, если я использую Ctrl-A, Ctrl-C для копирования всей консоли, она вставляет полные строки. Но я не вижу ничего, написанного белым текстом. Я не могу выбрать части строки. - person ᴇʟᴇvᴀтᴇ; 30.08.2012