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, как и ожидалось.