web-dev-qa-db-fra.com

Conversion de caractères en nombres entiers dans Java

Quelqu'un peut-il m'expliquer s'il vous plaît ce qui se passe ici:

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

Ceci imprime i: 43 ch:-1. Est-ce que cela signifie que je dois me fier aux conversions primitives pour convertir char en int? Alors, comment puis-je convertir un Character en Integer?

Edit: Oui, je sais que Character.getNumericValue renvoie -1 s'il ne s'agit pas d'une valeur numérique et que cela a du sens pour moi. La question qui se pose est la suivante: pourquoi les conversions primitives renvoient-elles 43?

Edit2:43 est le ASCII pour +, mais je m'attendrais à ce que la distribution ne réussisse pas comme getNumericValue n'a pas réussi. Sinon, cela signifie qu'il existe deux manières sémantiques équivalentes d'effectuer la même opération mais avec des résultats différents?

57
JRR
Character.getNumericValue(c)

Java.lang.Character.getNumericValue(char ch) renvoie la valeur int représentée par le caractère Unicode spécifié. Par exemple, le caractère '\u216C' (le chiffre romain cinquante) renverra un int avec une valeur de 50.

Les lettres AZ dans leurs majuscules ('\u0041' through '\u005A'), minuscules ('\u0061' through '\u007A') et variantes pleine largeur ('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A') ont des valeurs numériques comprises entre 10 et 35. Ceci est indépendant de la spécification Unicode, qui n'affecte pas de valeur numérique. valeurs à ces valeurs char.

Cette méthode renvoie la valeur numérique du caractère, sous la forme d'une valeur int non négative.

-2 si le caractère a une valeur numérique qui n'est pas un entier non négatif;

-1 si le caractère n'a pas de valeur numérique.

Et ici est le lien.

85
Trying

Comme l'indique clairement la documentation, Character.getNumericValue() renvoie la valeur du caractère sous forme de chiffre.
Il retourne -1 si le caractère n'est pas un chiffre.

Si vous voulez obtenir le point de code Unicode numérique d'un objet Character encadré, vous devez d'abord le déballer:

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

Essayez l'une des options ci-dessous. Ceux-ci devraient fonctionner:

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

Depuis le Javadoc pour Character#getNumericValue:

Si le caractère n'a pas de valeur numérique, -1 est renvoyé. Si le caractère a une valeur numérique qui ne peut pas être représentée sous la forme d'un entier non négatif (par exemple, une valeur fractionnelle), alors -2 est renvoyé.

Le caractère + n'a pas de valeur numérique, vous obtenez donc -1.

Mise à jour:

La raison pour laquelle la conversion primitive vous donne 43, c'est que le caractère '+' est codé sous la forme d'un entier 43.

2
Aurand

43 est le numéro ascii du symbole "+". Cela explique pourquoi vous obtenez un 43 en arrière. http://en.wikipedia.org/wiki/ASCII

1
Fareed Quraishi
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;
}