2010-01-27 10 views
5

Je manque probablement quelque chose, mais pourquoi les deux valeurs numériques sont égales à -1?Character.getNumericValue() question

System.out.println(Character.getNumericValue(Character.MAX_VALUE)); 
    System.out.println(Character.getNumericValue(Character.MIN_VALUE)); 

retours:

-1 
-1 

Répondre

9

getNumericValue() convertira caractères qui représentent en fait des nombres (comme les chiffres "normaux" 0-9, mais aussi dans d'autres chiffres scripts) à leur valeur numérique. Les caractères représentés par Character.MAX_VALUE et Character.MIN_VALUE n'ont pas une telle valeur numérique; ce ne sont pas des chiffres. Et selon le API doc:

Si le personnage ne dispose pas d'une valeur numérique , alors -1 est retourné.

3

Parce que Character.MAX_VALUE et Character.MIN_VALUE ne sont pas numériques. Character.getNumericValue(char) renvoie -1 lorsque le paramètre n'est pas un caractère mappé à un nombre.

Les caractères numériques (0-9), les lettres (A-Z) et d'autres caractères numériques unicode sont associés à des valeurs. Je ne connais pas tous les autres personnages qui sont cartographiés. Mais beaucoup de caractères vont juste revenir -1.

+0

Votre dernière phrase est incorrecte; il y a beaucoup plus de caractères qui ont des valeurs numériques associées définies par la norme Unicode. –

+0

Ah, je ne le savais pas. Je suppose qu'ils donnent juste des chiffres romains comme exemple dans la documentation de la méthode. –

3

.. juste parce que \u0000 et '\ uffff` ne représentent pas un chiffre et n'ont pas de valeur numérique.

Je suppose que vous recherchez la valeur 16bit du char, mais pour cela, nous pouvons simplement jeter:

int value = (int) Character.MAX_VALUE; 
4

getNumericValue() applique uniquement aux caractères qui représentent des nombres, tels que les chiffres '0' par '9'. Pour plus de commodité, il traite aussi les lettres ASCII comme s'il s'agissait de chiffres dans un système de base 36 (donc 'A' est 10 et 'Z' est 35).

Celui-ci trompe beaucoup de monde. Si vous voulez connaître la valeur Unicode d'un caractère, tout ce que vous avez à faire est de le jeter aux int:

System.out.println((int)Character.MAX_VALUE); 
System.out.println((int)Character.MIN_VALUE);