Java Eclipse — перенос строк для System.out.println()

Я попросил помощи с этой проблемой, в которой, когда я хочу конвертировать байты из таблицы

`[0, 0, 0, 0, 0, 0, 0, 0, 122, 98, 117, 54, 46, 0, 0, 115, 122, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 121, 116, 117, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 107, 111, 98, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 42, 109, 111, 119, 40, 0, 0, 0, 0, 0, 0, 107, 111, 98, 0, 0, 0, 0, 0, 98, 111, 40]`

в символы и напечатать эти символы. Когда я делаю:

    for(byte b: byteArray){
        System.out.print((char) b);
    }

У меня ничего нет на консоли. Даже полосы прокрутки имеют одинаковую длину. Но когда я делаю:

for(byte b: byteArray){
 System.out.println((char) b);
}

это работает хорошо. Я думаю, что это проблема с затмением, а не с кодом. Я снял галочку с ограничения вывода консоли, но это не помогло.


person Rop    schedule 19.03.2014    source источник
comment
Вы знаете, что некоторые кодировки не являются одним байтом на символ, верно? Какую кодировку вы используете и почему не используете конструктор String(byte[], Charset)?   -  person fge    schedule 19.03.2014
comment
Как насчет System.out.print(new String(byteArray));   -  person Mohammad Adil    schedule 19.03.2014
comment
@MohammadAdil Я тоже пытался это сделать. Но все равно ничего не появляется   -  person Rop    schedule 19.03.2014
comment
@Rop я попробовал System.out.print((char) b); и в моей консоли eclipse все работает нормально. Должно быть что-то не так с твоим затмением. И решение Мохаммеда тоже сработало.   -  person kai    schedule 19.03.2014
comment
@kai Я догадался, но я не знаю, что случилось с моим затмением   -  person Rop    schedule 19.03.2014


Ответы (5)


char имеет размер 2 байта, если номер байта выходит за пределы диапазона от -128 до 127,

person Vivek Keshri    schedule 19.03.2014

стараться сделать

for(byte b: byteArray){
    System.out.print((char) b);
}
System.out.println();

Метод print может быть буферизован и не отображаться, пока вы не печатаете \n

person Ludovic Feltz    schedule 19.03.2014

Я бы попытался исключить непечатаемые символы, например 0

for(byte b: byteArray){
    System.out.print(b >= 32 ? (char) b : "");
}

Вы можете заменить пустую строку на все, что вам нужно, как "?" или "[ascii_code]"...

Я тестировал ваши данные, и в моем Eclipse (OSX) в обоих случаях появляется мой код:

public static void main(String[] args) {
    byte[] bytes =
        { 0, 0, 0, 0, 0, 0, 0, 0, 122, 98, 117, 54, 46, 0, 0, 115, 122, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 121, 116, 117, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 107, 111, 98, 105, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 122, 42, 109, 111, 119, 40, 0, 0, 0, 0, 0, 0, 107, 111, 98, 0, 0, 0, 0, 0, 98, 111, 40 };
    System.out.println("Init...");
    for (byte b : bytes) {
        System.out.print((char) b);
    }
    System.out.println();
    System.out.println();
    for (byte b : bytes) {
        System.out.print(b >= 32 ? (char) b : "?");
    }
    System.out.println();
    System.out.println("End");
}

Выход для этого:

Init...
zbu6.sz*tytul kobiz*mow(kobbo(

????????zbu6.??sz*???????????tytul?????????????????????? kobi????????????????????????????????????????????????????????????????????????????????????z*mow(??????kob?????bo(
End
person Roberto    schedule 19.03.2014

проблема точно в вашем окружении.

моя консоль eclipse выводит это с помощью вашего первого цикла:

введите здесь описание изображения

забавно, я не могу скопировать/вставить этот вывод. я думаю, что это ошибка \0 байт.

person Michele Mariotti    schedule 19.03.2014

Консоль плохо реагирует на нулевой символ \u0000, который часто используется как ограничитель строки.

Eclipse использует SWT, который часто использует собственные элементы управления, где это возможно, поэтому может быть дефект в базовом наборе инструментов пользовательского интерфейса или в том, как его использует SWT.

Об этом сообщалось ранее — Ошибка 362957 — Консоль неправильно отображает '\ u0000' — поэтому вы можете добавить свой вклад в отчет об ошибке и проголосовать за него.

я бы включил:

  • Операционная система/версия
  • Eclipse and SWT build versions (look in the plugins directory)
    • any changes if any you've made to the stylesheets (e.g. e4_default_gtk.css)
  • Версия инструментария пользовательского интерфейса платформы, если применимо (например, GTK)
  • Шрифт — см. настройки
  • Версия Java (вероятно, не имеет значения)
person McDowell    schedule 19.03.2014