2013-10-15 9 views
52

Kann jemand mir bitte erklären, was hier vor sich geht:Konvertieren von Zeichen auf ganze Zahlen in Java

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

Dieser druckt i: 43 ch:-1. Bedeutet das, dass ich mich auf primitive Konvertierungen verlassen muss, um char in int zu konvertieren? Also, wie kann ich eine Character zu Integer konvertieren?

Edit: Ja, ich weiß Character.getNumericValue kehrt -1, wenn es nicht ein numerischer Wert ist, und das macht Sinn für mich. Die Frage ist: Warum gibt primitive Konvertierungen 43 zurück?

Edit2:43 ist die ASCII für +, aber ich würde die Besetzung nicht gelingen erwarten wie getNumericValue nicht erfolgreich war. Sonst bedeutet das, dass es zwei semantisch äquivalente Möglichkeiten gibt, die gleiche Operation auszuführen, aber mit unterschiedlichen Ergebnissen?

+1

Was hast du erwartet, anstatt zu bekommen von '43'? –

+4

Ich glaube nicht, dass 'getNumericValue' tut, was Sie denken, dass es tut. Das ist eine Hilfsmethode, die Zeichen in Ganzzahlen umwandelt (wie zB das Zeichen '5' in die Ganzzahl 5). Das ist nicht dasselbe wie eine Besetzung (die das Zeichen '5' in die Ganzzahl 53 umwandelt). – Aurand

+0

Der Punkt ist, dass Casting nicht den numerischen Wert der Ziffer zurückgibt. Diese zwei Operationen machen zwei verschiedene Dinge. – SLaks

Antwort

38

Wie die Dokumentation eindeutig angibt, gibt Character.getNumericValue() den Wert des Zeichens als Ziffer zurück.
Es gibt -1 zurück, wenn das Zeichen keine Ziffer ist.

Wenn Sie den numerischen Unicode-Codepunkt einer Box Character Objekt erhalten möchten, müssen Sie es unbox zuerst:

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

Sie können möglicherweise auf diese Dokumentation verweisen: http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getNumericValue%28char%29 –

2

Von der Javadoc für Character#getNumericValue:

Wenn die Zeichen hat keinen numerischen Wert, dann wird -1 zurückgegeben. Wenn das Zeichen einen numerischen Wert hat, der nicht als nichtnegative Ganzzahl dargestellt werden kann (z. B. ein Bruchwert), wird -2 als zurückgegeben.

Das Zeichen + hat keinen numerischen Wert, Sie erhalten also -1.

Update:

Der Grund, dass primitive Umwandlung Sie 43 gibt, ist, dass die das Zeichen ‚+‘ als ganze Zahl kodiert ist 43.

77
Character.getNumericValue(c) 

Die java.lang.Character.getNumericValue(char ch) gibt den int Wert, dass die angegebene Unicode-Zeichen repräsentiert. Zum Beispiel wird das Zeichen '\u216C' (die römische Zahl fünfzig) einen int mit einem Wert von 50.

die Buchstaben AZ in ihren Groß ('\u0041' through '\u005A'), Klein ('\u0061' through '\u007A') und volle Breite Variante zurückzukehren ('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A') Formen haben numerische Werte von 10 bis 35 Dies ist unabhängig von der Unicode-Spezifikation, die diesen char-Werten keine numerischen Werte zuweist.

Diese Methode gibt den numerischen Wert des Zeichens als nichtnegativen int-Wert zurück;

-2 wenn das Zeichen einen numerischen Wert hat, der keine nichtnegative Ganzzahl ist;

-1, wenn das Zeichen keinen numerischen Wert hat.

Und here ist der Link.

32

Versuchen Sie eine der folgenden. Diese sollten arbeiten:

int a = Character.getNumericValue('3'); 
int a = Integer.parseInt(String.valueOf('3'); 
1
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; 
} 
Verwandte Themen