2010-01-27 7 views
5

Ich verpasse wahrscheinlich etwas, aber warum die beiden numerischen Werte gleich sind -1?Character.getNumericValue() Problem

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

kehrt:

-1 
-1 

Antwort

9

getNumericValue() werden Zeichen konvertieren, die tatsächlich Zahlen darstellen (wie die "normalen" Ziffern 0-9, aber auch Zahlen in anderen Skripten) auf ihren numerischen Wert. Die durch Character.MAX_VALUE und Character.MIN_VALUE dargestellten Zeichen haben keinen solchen numerischen Wert; Sie sind keine Ziffern. Und nach dem API doc:

Wenn das Zeichen kein numerischen Wert hat, dann wird -1 zurückgegeben.

3

Da Character.MAX_VALUE und Character.MIN_VALUE nicht numerisch sind. Character.getNumericValue(char) gibt -1 zurück, wenn der Parameter kein Zeichen ist, das einer Zahl zugeordnet ist.

Nummerzeichen (0-9), Buchstaben (A-Z) und andere Unicode-Nummern sind mit Werten verknüpft. Ich kenne nicht alle anderen Charaktere, die zugeordnet sind. Aber viele Charaktere werden nur -1 zurückgeben.

+0

Ihre letzte Satz ist falsch; Es gibt viele weitere Zeichen, denen numerische Werte zugeordnet sind, die vom Unicode-Standard definiert werden. –

+0

Ah, wusste das nicht. Ich schätze, sie geben nur römische Ziffern als 1 Beispiel in der Methodendokumentation. –

3

.. nur weil \u0000 und '\ uffff` keine Ziffer darstellen und keinen numerischen Wert haben.

Ich denke, Sie wurden für die 16-Bit-Wert des char suchen, aber dafür können wir einfach werfen:

int value = (int) Character.MAX_VALUE; 
4

getNumericValue() gilt nur Zeichen, die Zahlen darstellen, wie die Ziffern '0' durch '9'. Als Annehmlichkeit behandelt es auch die ASCII-Buchstaben, als wären sie Ziffern in einem Basis-36-Nummernsystem (so ist 'A' 10 und 'Z' ist 35).

Dieser eine dumme viele Menschen. Wenn Sie den Unicode Wert eines Zeichens wissen wollen, alles, was Sie tun müssen, ist es zu int Stimmen:

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