Преобразование символов в целые числа в 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 не удалось. В противном случае это означает, что есть два семантических эквивалентных способа выполнить одну и ту же операцию, но с разными результатами?

6 ответов

Character.getNumericValue(c)

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

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

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

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

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

А вот и ссылка.

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

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

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

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

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

От Javadoc для Character#getNumericValue:

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

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

Обновить:

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

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;
}

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

Другие вопросы по тегам