2013-04-15 18 views
5

私は配列(2番目と3番目の)スロットからint値に、例えば対応するcharを変換しようとしています。 A = 1、B = 2など。char A-Zを対応するintに変換します。

私は、(x.charAt(i)== 'a'){int z = 1; }私はそれが非常に実用的な方法だと思う全体のA - Zのために。より短いコードで同じことをすることができる方法はありますか?

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

場合'' A '== 1''、 '' a''''はどういう意味ですか? –

+1

ASCII文字で作業している場合は、 '(int)Character.toUpperCase( 'A') - 64' = 1(または '(int)Character.toUpperCase(x.charAt i)) - 64') – MadProgrammer

+0

文字列はcharとintの混在のようなものになります。私は2番目と3番目の文字をintに変換する必要があります。それ以降は計算が必要になります。後にignorecaseを追加します。 – LRZJohn

答えて

4

これを試してください:あなたはint型の代わりに配列のchar配列を使用する必要が

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

} 

出力:

[1, 2, 3] 
+1

最後に、upvote :) –

3

あなたはケースにとらわれないように見えるので、あなたが最初の文字列を大文字または小文字にしたいかもしれませんが、あなたはロケール対応になりたいと思います:

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

代替ループが使用します。

// 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のロケールを指摘するために – acdcjunior

+0

これはパラノイアに適用されます。私は、第2の選択肢でケースを変更する必要がないことを指摘するために、私の答えを編集しました。 –

関連する問題