2010-10-16 5 views
26

mit dem folgenden Code:Was ist die "java" Art und Weise Zeichen (Ziffern) der Umwandlung zu Ints

char x = '5'; 
    int a0 = x - '0'; // 0 
    int a1 = Integer.parseInt(x + ""); // 1 
    int a2 = Integer.parseInt(Character.toString(x)); // 2 
    int a3 = Character.digit(x, 10); // 3 
    int a4 = Character.getNumericValue(x); // 4 
    System.out.printf("%d %d %d %d %d", a0, a1, a2, a3, a4); 

(Version 4 gutgeschrieben: casablanca)

Was Sie betrachten die "sein best-way "um ein char in ein int zu konvertieren? ("best-way" ~ = idiomatische Weg)

Wir nicht den tatsächlichen numerischen Wert der char Umwandlung, sondern der Wert der Darstellung.

Eg .:

convert('1') -> 1 
convert('2') -> 2 
.... 
+2

Ich bin ziemlich sicher, dass jemand aus diesen alten C und Pascal Dinge, wie ich, würde für die erste Wahl abstimmen. –

+1

@Nikita: Ich komme von diesen "uralten C und Pascal Dingen", aber wenn Leistung nicht absolut kritisch ist, würde ich einen ausdrucksvolleren Weg bevorzugen als 'x - '0''. – casablanca

Antwort

6

Die erste Methode. Es ist das leichteste und direkteste und entspricht dem, was Sie in anderen (untergeordneten) Sprachen tun könnten. Natürlich lässt seine Fehlerbehandlung etwas zu wünschen übrig.

14

Ich würde stark bevorzugen Character.digit.

+1

Bitte erläutern Sie Begründung –

2

Wenn die Geschwindigkeit kritisch ist (anstelle der Validierung können Sie das Ergebnis kombinieren) z.

char d0 = '0'; 
char d1 = '4'; 
char d2 = '2'; 
int value = d0 * 100 + d1 * 10 + d2 - '0' * 111; 
+1

Ich mag die "0" * 111 "Wert :-) – dedek

-1

Konvertieren dann Ascii 48.

(int) '7' would be 55 
((int) '7') - 48 = 7 
((int) '9') - 48 = 9 
-2

subtrahieren Wenn Sie es von "scratch" tun wollen, dann können Sie diese verwenden, zum Beispiel:

String str = "98"; 
int number = 0; 

number = str.charAt(0) - '0'; 
number += str.charAt(1) - '0'; 

System.out.println(number); 

Konsole : 98

Was dies tut, verwendet die ASCII-Werte, die demzugewiesen sind'9' und '8' (jeweils 57 und 56), wenn Sie die Null char '0' subtrahieren, subtrahieren Sie 48 von jedem numerischen char, was Ihnen das int entspricht. Also seit char hat '9' einen ASCII-Wert von 57 ... 57 - 48 = 9.

+0

Das Beispiel wird" 17 "drucken, so ist es falsch. – Zorgatone

+0

@Zorgatone, welche Zahl hast du erwartet? Dies ändert erfolgreich die Zeichen in einer Zeichenfolge in Ints und fügt sie dann zusammen, was gleich 17 ist. Sie können mit den Ints alles tun, was Sie wollen, aber dieses Beispiel fügt sie hinzu. – Azurespot

-2

Um ein Zeichen erfolgreich analysieren zu können, ohne dass zusätzliche Schleifen verwendet werden müssen, die fehleranfällig sind, können Sie das Zeichen in eine Zeichenfolge konvertieren und dann parseInt es:

(Integer.parseInt(String.valueOf(invalue.charAt(i)))) 
Verwandte Themen