我正在关注一个例子enter link description here,但我有一个小小的困惑。以下行是什么意思?
int charPos = word.charAt(0) - 'a';
从char中减去一个字母实际上意味着什么? 我想知道你是否如何获得字母表中字符的位置。
答案 0 :(得分:1)
它为您提供相对于字符(ASCII)表中a
字符的位置。如果输入字符是小写的,那么这也是字母表中的位置(基于零索引)。
示例:
'Z' - 'a'
为您提供90 - 97 = -7
'b' - 'a'
为您提供98 - 97 = 1
答案 1 :(得分:1)
答案 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个“字母”,每个语言都有一些学习机构用字母表示的字样。