4

有没有办法在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)

(我正在寻找包含第一个字母的距离)

谢谢!

4

6 回答 6

12

你可以这样做:

int diff = Character.toLowerCase('C') - Character.toLowerCase('A');

这是可行的,因为每个char都与一个ASCII值相关联。'C' 的值为 67,而 'A' 的值为 65,因此'C' - 'A'== 67 - 65。请注意,这仅适用于所有字符为大写或所有字符均为小写的情况。

于 2012-07-18T19:23:28.760 回答
3

对于包含单个字符的字符串:

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);
于 2012-07-18T19:27:03.567 回答
3

大多数情况下,减去 ASCII 码和 UNICODE 码点应该可以工作。

对于与编码无关的解决方案,您可以使用此代码段:即使您使用恐龙在地球上漫游时存在的一些非常古老的编码 ,这也将起作用。

String all = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int diff = all.indexOf('Y')-all.indexOf('B')+1;
于 2012-07-18T19:28:05.417 回答
2

作为一般解决方案:

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
于 2012-07-18T19:28:18.410 回答
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

我们必须添加一个以使距离包含在内。

请务必注意,字符是大写还是小写都会影响结果,因为它们具有不同的 Unicode 值。例如,以下操作会产生意想不到的结果:

System.out.println(('c'-'A') + 1);
> 35

因此,如果您希望两个字母之间的距离完全独立于大小写,请务必在输入和数学运算之间添加一些大小写检查。

于 2012-07-18T19:36:06.983 回答
0

你总能做到

System.out.println('C' - 'A' + 1);

于 2012-07-18T19:25:14.820 回答