Javaで文字の距離を見つける方法はありますか?
私が意味するのは、例えば:
A -> C = 3 (as A, B, C)
B -> G = 6 (as B, C, D, E, F, G)
R -> Z = 9 (as R, S, T, U, V, W, X, Y, Z)
(最初の文字を含む距離を探しています)
ありがとう!
Javaで文字の距離を見つける方法はありますか?
私が意味するのは、例えば:
A -> C = 3 (as A, B, C)
B -> G = 6 (as B, C, D, E, F, G)
R -> Z = 9 (as R, S, T, U, V, W, X, Y, Z)
(最初の文字を含む距離を探しています)
ありがとう!
あなたはこれを行うことができます:
int diff = Character.toLowerCase('C') - Character.toLowerCase('A');
それぞれがASCII値char
に関連付けられているため、これは機能します。「C」の値は67、「A」の値は65であるため、==です。これは、すべての文字が大文字であるか、すべての文字が小文字である場合にのみ機能することに注意してください。'C' - 'A'
67 - 65
1文字を含む文字列の場合:
String s1 = "A";
String s2 = "c";
int result = ((int)s2.toLowerCase().charAt(0) - (int)s1.toLowerCase().charAt(0)) + 1;
文字のみ(文字列なし)で作業している場合、JavaのCharacter
クラスには静的toLowerCase()
メソッドがあります。
編集
結果が負になる可能性がある場合('A'-'C'):
result = Math.abs(result);
ASCIIコードとUNICODEコードポイントの減算は、ほとんどの場合機能するはずです。
エンコーディングに依存しないソリューションの場合、このスニペットを使用できます。これは、恐竜が地球を歩き回ったときに存在していた本当に古風なエンコーディング を使用している場合でも機能します。
String all = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int diff = all.indexOf('Y')-all.indexOf('B')+1;
一般的な解決策として:
public static int countLetters(char a, char b)
{
return Math.abs(Character.toLowerCase(a) - Character.toLowerCase(b)) + 1;
}
System.out.println(countLetters('a', 'B'));
出力:
2
Javaでは、char
変数は実際にはとして扱うことができますint
。変数の範囲はchar
0〜65,535(両端を含む)で、各数値は異なるUnicode文字に対応しています。
そのため、文字に対して直接数学演算を実行するだけで、目的の結果を得ることができます。与えられた例を変換するには:
System.out.println(('C'-'A') + 1);
> 3
System.out.println(('G'-'B') + 1);
> 6
System.out.println(('Z'-'R') + 1);
> 9
距離を含めるには、1つ追加する必要があります。
文字が大文字であるか小文字であるかは、Unicode値が異なるため、結果に影響することに注意することが重要です。たとえば、次の操作は意図しない結果をもたらします。
System.out.println(('c'-'A') + 1);
> 35
したがって、大文字と小文字を完全に区別しない2つの文字間の距離が必要な場合は、入力と数学演算の間に大文字と小文字のチェックを追加してください。
あなたはいつでもすることができます
System.out.println('C' - 'A' + 1);