Java字母距离?

Java字母距离?,java,Java,有没有一种方法可以在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'); 这是可行的,因为每

有没有一种方法可以在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
都与一个值关联C'的值为67,“A”的值为65,因此
'C'-'A'
=
67-65
。请注意,只有当所有字符都是大写或小写时,此选项才有效。

您始终可以这样做


系统输出打印项次('C'-'A'+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”):


减去ASCII码和UNICODE码点在大多数情况下都应该有效

对于一个独立于编码的解决方案,您可以使用以下代码片段:即使您使用恐龙在地球上漫游时的一些代码片段,这也会起作用

作为一般解决方案:

public static int countLetters(char a, char b)
{
    return Math.abs(Character.toLowerCase(a) - Character.toLowerCase(b)) + 1;
}
输出:

2

在Java中,
char
变量实际上可以被视为
int
char
变量的范围为0到65535(含),每个数字对应一个不同的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

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

只要确保询问者知道,如果混合大小写,这将产生不同的结果+1请注意,如果您不在乎大小写,请记住小写和大写有不同的值。请先将所有字母转换为大写或小写,然后进行比较。您应该添加一个
+1
,因为OP希望计算所有字母,包括给定的字母。编辑以合并每个人的注释。
字符。toLowerCase()
始终是一个选项。有趣的想法!我从来没有想过。今天人们会自愿使用这些编码吗?@BlackPlanet哦,不是自愿的,不是。也许是为了大赚一笔,但不是为了好玩或别的什么。我甚至不确定大型机上的Java是否使用EBCDIC。Java语言规范:“整数类型是[…]和
char
,其值是表示UTF-16代码单元的16位无符号整数(§3.1)”。
2
System.out.println(('C'-'A') + 1);
> 3
System.out.println(('G'-'B') + 1);
> 6
System.out.println(('Z'-'R') + 1);
> 9
System.out.println(('c'-'A') + 1);
> 35