2010-01-27 15 views
5

Probablemente me esté perdiendo algo, pero ¿por qué los dos valores numéricos son -1?Character.getNumericValue() problema

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

devuelve:

-1 
-1 

Respuesta

9

getNumericValue() va a convertir caracteres que realmente representan los números (como los dígitos 0-9 "normales", sino también en otros números scripts) a su valor numérico. Los caracteres representados por Character.MAX_VALUE y Character.MIN_VALUE no tienen dicho valor numérico; ellos no son numerales Y de acuerdo con la API doc:

Si el personaje no tiene un valor numérico , a continuación, se devuelve -1.

3

Porque Character.MAX_VALUE y no son numéricos. Character.getNumericValue(char) devuelve -1 cuando el parámetro no es un carácter que se asigna a un número.

Los caracteres numéricos (0-9), los caracteres de las letras (A-Z) y otros caracteres numéricos Unicode están asociados a los valores. No conozco a todos los demás personajes que están mapeados. Pero muchos personajes simplemente devolverán -1.

+0

Su última frase es incorrecta; hay muchos más caracteres que tienen valores numéricos asociados definidos por el estándar Unicode. –

+0

Ah, no lo sabía. Supongo que solo dan números romanos como 1 ejemplo en la documentación del método. –

3

.. solo porque \u0000 y '\ uffff` no representan un dígito y no tienen un valor numérico.

supongo que estás buscando el valor de 16 bits del carbón, pero para esto podemos simplemente echar:

int value = (int) Character.MAX_VALUE; 
4

getNumericValue() sólo se aplica a los caracteres que representan números, tales como los dígitos '0' través '9'. Para su comodidad, también trata las letras ASCII como si fueran dígitos en un sistema de número base 36 (entonces 'A' es 10 y 'Z' es 35).

Este engaña a mucha gente. Si desea conocer el valorUnicode de un carácter, todo lo que tiene que hacer es lanzado a int:

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