有没有办法在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');
这是可行的,因为每个char
都与一个ASCII值相关联。'C' 的值为 67,而 'A' 的值为 65,因此'C' - 'A'
== 67 - 65
。请注意,这仅适用于所有字符为大写或所有字符均为小写的情况。
对于包含单个字符的字符串:
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
我们必须添加一个以使距离包含在内。
请务必注意,字符是大写还是小写都会影响结果,因为它们具有不同的 Unicode 值。例如,以下操作会产生意想不到的结果:
System.out.println(('c'-'A') + 1);
> 35
因此,如果您希望两个字母之间的距离完全独立于大小写,请务必在输入和数学运算之间添加一些大小写检查。
你总能做到
System.out.println('C' - 'A' + 1);