2013-04-15 28 views
5

A char'ı bir diziden (2. ve 3.) yuvaya, örneğin, karşılık gelen int değerine dönüştürmeye çalışıyorum. A = 1, B = 2, vs. A-Z için.A-Z harfini karşılık gelen int'ye dönüştürün.

Uzun yoldan (x.charAt (i) == 'a') {int z = 1; Tüm A - Z için çok pratik bir yöntem olduğunu düşünüyorum. Aynı şeyi daha kısa bir kod ile yapabilecek herhangi bir yöntem var mı?

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

ise 'A '== 1', a' a eşittir? –

+1

Eğer ASCII karakterleri ile çalışıyorsanız, '(int) karakter.toUpperCase ('A') - 64' gibi bir şey yapabilirsiniz. = '1' (veya' (int) Character.toUpperCase (x.charAt) i)) - 64 ') – MadProgrammer

+0

Dize, char ve int'nin karışımı gibi bir şey olacaktır. Bundan sonra hesaplamaya ihtiyaç duyulacağından sadece 2. ve 3. harfleri int'ye çevirmem gerekecek. Sonra ignorecase ekleyecektir. – LRZJohn

cevap

4

bu deneyin: Sen int yerine Array Char Array kullanmak zorunda

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

.

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

} 

Çıktı: Eğer durum agnostik gibi görünüyor yana

[1, 2, 3] 
+1

Son olarak, kazanın :) –

3

, sen büyük harfe istediğiniz ya da ilk dizeyi küçük harf, ancak yerel ayara duyarlı olmak isterdim olabilir:

// 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; 
} 

alternatif bir döngü kullanırsınız:

// 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 Paranoya uygulandı. İkinci alternatifimde davayı değiştirmenize gerek olmadığını belirtmek için cevabımı düzenledim. – acdcjunior

+0

Yerel paragraf işaretlemek için –

İlgili konular