从字符中减去一个字符是什么意思

时间:2016-05-11 22:05:59

标签: ascii

我正在关注一个例子enter link description here,但我有一个小小的困惑。以下行是什么意思?

int charPos = word.charAt(0) - 'a';

从char中减去一个字母实际上意味着什么? 我想知道你是否如何获得字母表中字符的位置。

3 个答案:

答案 0 :(得分:1)

它为您提供相对于字符(ASCII)表中a字符的位置。如果输入字符是小写的,那么这也是字母表中的位置(基于零索引)。

示例:

'Z' - 'a'为您提供90 - 97 = -7

'b' - 'a'为您提供98 - 97 = 1

答案 1 :(得分:1)

ascii表中的'p'是97,'b' - 'a'相当于98 - 97,结果为1,这是b在字母数组中的位置(a为0)

答案 2 :(得分:0)

其他答案在理论上是正确的,但是对ASCII的引用是完全错误的。

在Java中,charAt返回Unicode / UTF-16代码单元。 UTF-16在一个代码单元中编码一些Unicode代码点;一些两个。如果您的数据位于UTF-16在一个代码单元中编码的代码点范围内,则减法是这些代码点之间的“距离”。如果代码点在某个“有意义”的顺序范围内,则距离是有意义的。

例如,Basic Latin小写字母按英文字母顺序排列,UTF-16以一个代码单位对它们进行编码。距离将沿着“字母线”而不是“数字线”。这适用于英语和其他一些字母表,但不适用于其他许多字母表。

此外,从'a'减去会将'a'映射为0,'b'映射为1,'z'映射为25,.... 'z'之后是什么?好吧,也许您不应该将此代码应用于此类数据。事实上,即使您的文本只是小写的英文单词,该算法也无法处理英文单词“naïve”或“resumé”。

BTW-许多语言使用的数十种书写系统(脚本)中有大约120,000个“字母”,每个语言都有一些学习机构用字母表示的字样。