Java:用char减去char是什么意思?

时间:2018-01-24 13:56:13

标签: java arrays

最近,在进行一项计划时,我遇到了一个问题。 以下是该计划的一部分

public static int numberNeeded(String first, String second) {
        int[] lettercounts = new int[26];
        for(char c : first.toCharArray()){
            lettercounts[c-'a']++;
        }

我不明白这行代码的作用:

lettercounts[c-'a']++;

我猜它在特定字符的lettercounts数组中递增值(最初为0);我在猜测' a'是0和' z'是的。但我想了解这段代码是如何工作的。

3 个答案:

答案 0 :(得分:5)

目标是计算每个角色的出现次数。

c - 'a'

是一种在字母表中获取角色位置的聪明方法。 'a' - 'a'会给你0. 'b' - 'a'会给你1. 'c' - 'a'会给你2,依此类推。

该值用作数组的索引(正如您所说的那样用零初始化)并且计数递增。

值得注意的是,如果字符串中包含a-z以外的任何字符(包括大写字符),则会中断,并且您会看到IndexOutOfBoundsException

答案 1 :(得分:2)

这基本上只是将字符(在您的示例中为“a”)转换为其代表的字母中的字母数字。 'a'实际上有一个ASCII(技术上是utf-16,其前255个值是ASCII值)数值(97)。所有其他的角色也是如此。因此,如果char为'b',则将访问数组的第二个元素(位置1,98-97 = 1)。如果char是'z',则数组的第26个元素将被访问(在位置25)。您可以通过在搜索引擎中键入“ASCII表”轻松找到ASCII值表。

int a = 'b' - 'a';

与:

相同
int b = 98 - 97;

注意:您不能在小写和大写字母之间执行此操作,因为它们具有完全不同的ASCII值('A',例如65,而'a'是97)。

答案 2 :(得分:2)

Java中的

<script language="JavaScript"> alert(navigator.appName); if(navigator.appName!='Microsoft Internet Explorer'){ alert('NAVEGADOR NÃO INDICADO!\nO Navegador que você está usando não é o adequado para a visualização desse site.\nEste site foi projetado para ser visualizado com Microsoft Internet Explorer, versão 6 ou superior'); </script> 变量是数值。因此,从char的值中减去'a'将使其偏离字母表的开头。这允许您将此值用作数组索引,正如您已正确猜到的那样。