2013-04-15 16 views
5

Próbuję przekonwertować znak A z tablicy (2 i 3) na wartość int, która odpowiada np. A = 1, B = 2 itd. Dla A-Z.Konwertuj znak A-Z na odpowiadający int.

Myślę, że tak będzie długa droga, jeśli (x.charAt (i) == "a") {int z = 1; } dla całego A - Z, co uważam za bardzo praktyczną metodę. Czy jest jakaś metoda, która może zrobić to samo z krótszym kodem?

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

Jeśli ''A' == 1', co oznacza" a'' "? –

+1

Jeśli pracujesz ze znakami ASCII, możesz zrobić coś takiego jak '(int) Character.toUpperCase (" A ") - 64', które będzie =' 1' (lub '(int) Character.toUpperCase (x.charAt (i)) - 64') – MadProgrammer

+0

Ciąg będzie czymś w rodzaju mieszaniny char i int. Będę musiał przekonwertować tylko drugą i trzecią literę na int, ponieważ będą potrzebne dalsze obliczenia. Doda po ignorecase. – LRZJohn

Odpowiedz

4

Spróbuj tego:

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

Musisz użyć int tablicy zamiast char tablicy.

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)); 

} 

wyjściowa:

[1, 2, 3] 
+1

Wreszcie, upvote :) –

3

Ponieważ wydaje się być przypadek agnostyk, może chcesz duży lub mały ciąg pierwszym, ale że chcesz być 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; 
} 

alternatywą pętla użyłby:

// 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 za wskazanie lokalizacji – acdcjunior

+0

Zastosowano paranoję. Zmieniłem moją odpowiedź, aby podkreślić, że nie musisz zmieniać sprawy w mojej drugiej alternatywie. –