2012-12-05 3 views
5

Почему я получаю то же самое? Результаты для букв верхнего и нижнего регистра? Например:Значения символов символов Java с getNumericValue()

char ch1 = 'A'; 
char ch2 = 'a'; 
char ch3 = 'Z'; 
char ch4 = 'z'; 

print("ch1 -- > " + Integer.toBinaryString(Character.getNumericValue(ch1))); 
print("ch2 -- > " + Integer.toBinaryString(Character.getNumericValue(ch2))); 
print("ch3 -- > " + Integer.toBinaryString(Character.getNumericValue(ch3))); 
print("ch4 -- > " + Integer.toBinaryString(Character.getNumericValue(ch4))); 

Как показывают результаты я получаю:

ch1 -- > 1010 
ch2 -- > 1010 
ch3 -- > 100011 
ch4 -- > 100011 

И действительно не видите разницы между 'A' и 'а'. Даже если я использую символьные литералы в форме UTF (\ u0041 для 'A' и \ u0061 для 'a'), я получаю те же результаты.

ответ

7

Это точно ведет себя, как documented:

Буквы AZ в верхнем регистре ('\ u0041' через '\ u005A'), в нижнем регистре ('\ u0061' через '\ u007a') и ширине вариант ('\ uFF21' через '\ uFF3A' и '\ uFF41' через '\ uFF5A') формы имеют числовые значения от 10 до 35.

В основном это означает, что при разборе шестигранник (скажем), 0xfa == 0xFA, как и следовало ожидать.

Я ожидал, что дело будет иметь значение при использовании чего-то типа base64.

+0

Давайте просто удалим этот комментарий и забудем об этом;) –

+0

Ничего себе, спасибо, я пропустил этот интересный момент из документов. Довольно странное поведение, ИМХО. То, что я ожидал - просто получить «целочисленное представление символьного литерала». –

+0

@DmitriyUgnichenko: Какой результат вы ожидали? – Dolda2000

4

Судя по комментарию, вы на самом деле ищете кодовые точки символов, а не их числовое значение, поэтому я просто выделим это в ответ. Функция getNumericValue() возвращает то, что символ означает как число при интерпретации своего глифа, он не возвращает кодовую точку символа. Например, getNumericValue('5') возвращает 5 как int, а не код 5.

Чтобы использовать коды, используйте переменные или литералы символов так, как они есть. char - это числовой тип данных. Например, System.out.println((int)'a'); напечатает 65, довольно просто.

+0

Да, спасибо. Это то, что я хотел (даже не знаю, почему я решил использовать этот метод getNumericValue()). Все гораздо проще. –

Смежные вопросы