2013-04-15 14 views
5

sto provando a convertire un carattere da uno slot matrice (2 ° e 3 °) a un valore int che corrisponde ad es. A = 1, B = 2, ecc. Per A-Z.Converti char A-Z in int corrispondente.

Sto pensando che il modo lungo farà se (x.charAt (i) == 'a') {int z = 1; } per l'intero A - Z che penso sia un metodo molto pratico. C'è qualche metodo che può fare la stessa cosa con un codice più corto?

public static void computeCheckDigit(String x){ 
char [] arr = new char[x.length()]; 

for(int i=0; i<x.length();i++){ 
    arr[i] = x.charAt(i); 
} 


} 
+1

Se ''A' == 1', cosa significa' 'a'' uguale? –

+1

Se stai lavorando con caratteri ASCII, potresti fare qualcosa come '(int) Character.toUpperCase ('A') - 64' che sarà =' 1' (o '(int) Character.toUpperCase (x.charAt (i)) - 64') – MadProgrammer

+0

La stringa sarà qualcosa come mix di char e int. Avrò bisogno di convertire solo 2a e 3a lettera a int come dopo il calcolo sarà necessario. Aggiungerà in ignorecase dopo. – LRZJohn

risposta

4

Prova questo:

arr[i] = Character.toLowerCase(x.charAt(i)) - 'a' + 1; 

Devi usare int Array invece array di caratteri.

public static void main(String[] args) { 
    String x = "AbC"; 
    int[] arr = new int[x.length()]; 

    for (int i = 0; i < x.length(); i++) { 
     arr[i] = Character.toLowerCase(x.charAt(i)) - 'a' + 1; 
    } 
    System.out.println(Arrays.toString(arr)); 

} 

uscita:

[1, 2, 3] 
+1

Infine, upvote :) –

3

Dal momento che ti sembra di essere caso agnostico, si potrebbe desiderare di maiuscole o minuscole stringa di prima, ma che ci si vuole essere locale-aware:

// If you don't state a locale, and you are in Turkey, 
// weird things can happen. Turkish has the İ character. 
// Using lower case instead could lead to the ı character instead. 
final String xu = x.toUpperCase(Locale.US); 
for (int i = 0; i < xu.length(); ++i) { 
    arr[i] = xu.charAt(i) - 'A' + 1; 
} 

Un circuito alternativo avrebbe usato:

// Casing not necessary. 
for (int i = 0; i < x.length(); ++i) { 
    // One character 
    String letter = x.substr(i, i+1); 
    // A is 10 in base 11 and higher. Z is 35 in base 36. 
    // Subtract 9 to have A-Z be 1-26. 
    arr[i] = Integer.valueOf(letter, 36) - 9; 
} 
+0

+1 per indicare le impostazioni locali – acdcjunior

+0

Viene applicata la paranoia. Ho modificato la mia risposta per far notare che non è necessario cambiare il caso nella mia seconda alternativa. –