Подтвердить что ты не робот

Преобразование символов в целые числа в Java

Может кто-нибудь объяснит мне, что здесь происходит:

char c = '+';
int i = (int)c;
System.out.println("i: " + i + " ch: " + Character.getNumericValue(c));

Отпечатает i: 43 ch:-1. Означает ли это, что я должен полагаться на примитивные преобразования для преобразования char в int? Итак, как я могу преобразовать Character в Integer?

Изменить: Да. Я знаю, что Character.getNumericValue возвращает -1, если это не числовое значение, и это имеет смысл для меня. Возникает вопрос: почему примитивные преобразования возвращают 43?

Edit2: 43 - это ASCII для +, но я ожидаю, что приведение не получится, как будто getNumericValue не удалось. В противном случае это означает, что существуют два семантических эквивалентных способа выполнения одной и той же операции, но с разными результатами?

4b9b3361

Ответ 1

Character.getNumericValue(c)

java.lang.Character.getNumericValue(char ch) возвращает значение int, которое представляет указанный символ Unicode. Например, символ '\u216C' (римская цифра 50) вернет значение int со значением 50.

Буквы AZ в их прописных ('\u0041' through '\u005A'), строчных ('\u0061' through '\u007A') и формах с полной шириной ('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A') имеют числовые значения от 10 до 35. Это не зависит от спецификации Unicode, которая не присваивает числовым значениям этим char.

Этот метод возвращает числовое значение символа, как неотрицательная стоимость int;

-2, если символ имеет числовое значение, которое не является неотрицательным целым числом;

-1, если символ не имеет числового значения.

И здесь - это ссылка.

Ответ 2

Как четко указано в документации, Character.getNumericValue() возвращает значение символа в виде цифры.
Он возвращает -1, если символ не является цифрой.

Если вы хотите получить числовую кодовую точку Юникода вложенного объекта Character, вам сначала необходимо распаковать ее:

int value = (int)c.charValue();

Ответ 3

Попробуйте выполнить одно из следующих действий. Они должны работать:

int a = Character.getNumericValue('3');
int a = Integer.parseInt(String.valueOf('3');

Ответ 4

Из Javadoc для Character#getNumericValue:

Если символ не имеет числового значения, возвращается -1. Если символ имеет числовое значение, которое не может быть представлено в виде неотрицательное целое число (например, дробное значение), тогда -2 вернулся.

Символ + не имеет числового значения, поэтому вы получаете -1. ​​

Update:

Причина, по которой примитивное преобразование дает вам 43, состоит в том, что символ "+" кодируется как целое число 43.

Ответ 5

43 - это число dec ascii для символа "+". Это объясняет, почему вы получаете 43 обратно. http://en.wikipedia.org/wiki/ASCII

Ответ 6

public class IntergerParser {

public static void main(String[] args){
String number = "+123123";
System.out.println(parseInt(number));
}

private static int parseInt(String number){
    char[] numChar = number.toCharArray();
    int intValue = 0;
    int decimal = 1;
    for(int index = numChar.length ; index > 0 ; index --){
        if(index == 1 ){
            if(numChar[index - 1] == '-'){
                return intValue * -1;
            } else if(numChar[index - 1] == '+'){
                return intValue;
            }
        }
        intValue = intValue + (((int)numChar[index-1] - 48) * (decimal));
        System.out.println((int)numChar[index-1] - 48+ " " + (decimal));
        decimal = decimal * 10;
    }
    return intValue;
}