5

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

長い道のりは if(x.charAt(i) == 'a'){ int z = 1; と考えています。非常に実用的な方法だと思います。短いコードで同じことを実行できる方法はありますか?

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


}
4

2 に答える 2

4

これを試して:

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

char 配列の代わりに int 配列を使用する必要があります。

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]
于 2013-04-15T04:47:07.627 に答える
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;
}
于 2013-04-15T05:05:03.257 に答える