2010-10-16 17 views
26

Étant donné le code suivant:Quelle est la "java" mode de conversion CHARS (chiffres) à 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 au crédit: casablanca)

Que considérez-vous comme le "best-way "convertir un caractère en un int? (« meilleur sens » ~ = façon idiomatiques)

Nous ne convertissons la valeur numérique réelle du char, mais la valeur de la représentation.

Ex .:

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

Je suis à peu près sûr que quiconque venant de ces anciennes choses C et Pascal, comme moi, voterait pour la première option. –

+1

@Nikita: Je viens de ces "choses C et Pascal antiques", mais à moins que la performance soit absolument critique, je préférerais une manière plus expressive que 'x - '0'. – casablanca

Répondre

6

La première méthode. C'est le plus léger et le plus direct, et correspond à ce que vous pourriez faire dans d'autres langues (de bas niveau). Bien sûr, sa gestion des erreurs laisse à désirer.

14

Je préférerais fortement Character.digit.

+1

Veuillez expliquer le raisonnement –

2

Si la vitesse est critique (plutôt que la validation, vous pouvez combiner le résultat) par ex.

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

J'aime la valeur ''0' * 111' :-) – dedek

-1

Convertir en Ascii soustrayez 48.

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

Si vous voulez le faire par "zéro", alors vous pouvez l'utiliser, par exemple:

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

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

System.out.println(number); 

console : 98

Ceci utilise les valeurs ASCII affectées au chars '9' et '8' (qui sont 57 et 56 respectivement), puis si vous soustrayez le zéro char '0', vous soustrayez 48 de chaque char numérique, ce qui vous donne l'équivalent int. Donc, puisque char '9' a une valeur ASCII de 57 ... 57 - 48 = 9.

+0

L'exemple affichera" 17 ", donc c'est faux. – Zorgatone

+0

@Zorgatone, quel nombre attendiez-vous? Cela change avec succès les caractères dans une chaîne en ints, puis les ajoute ensemble, ce qui équivaut à 17. Vous pouvez faire tout ce que vous voulez avec les ints, mais cet exemple les ajoute. – Azurespot

-2

Pour réussir l'analyse d'un caractère sans avoir besoin d'utiliser une boucle supplémentaire qui est sujette à erreur, vous pouvez convertir le caractère en une chaîne Et puis je l'analyse:

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