Печатать символы Unicode с циклом шестнадцатеричного кода

Я получаю незаконный выход из юникода для следующего кода.

 for(int i=3400;i<4000;i++)
   System.out.println("\u" + i );

Если я добавлю косую черту до того, как получу \u3400 в качестве вывода вместо фактического символа Юникода.

Я хочу печатать символы Юникода в цикле. Также символы Юникода являются шестнадцатеричными кодами. Как перебирать шестнадцатеричные коды и печатать все символы Юникода.


person Sorter    schedule 12.11.2015    source источник
comment
Пожалуйста, пройдите через: stackoverflow.com/questions/6230190/   -  person R.G    schedule 12.11.2015


Ответы (3)


Вы не можете конкатенировать "\u" с чем-то во время выполнения, потому что "\uXXXX" последовательности анализируются во время компиляции. Однако не нужно этого делать. Вы можете просто преобразовать целые числа в символы и использовать префикс 0x для указания шестнадцатеричных чисел:

for(int i=0x3400;i<0x4000;i++)
    System.out.println((char)i);
person Tagir Valeev    schedule 12.11.2015

То, что вы ищете, это что-то вроде:

    for (int i = 0x3400; i < 0x4000; i++) {
        System.out.println((char) i);
    }

Не стоит забывать, что любое число после префикса \u является шестнадцатеричным числом (основание 16). Из этого факта следует, что в вашем цикле вы потеряете много символов юникода в шестнадцатеричном интервале 3400...4000. Итак, вы должны изменить диапазон цикла на 0x3400 и 0x4000.

person Andremoniy    schedule 12.11.2015

вы можете использовать функцию format: -

for(int i=3400;i<4000;i++){
   System.out.format("\\u%04x", i);
}

Или в соответствии с этим ответом используйте это: -

for(int i=3400;i<4000;i++){
   System.out.println( "\\u" + Integer.toHexString(i| 0x10000).substring(1));
}
person karim mohsen    schedule 12.11.2015