我正在关注一个例子enter link description here,但我有一个小小的困惑。以下行意味着什么?从字符中减去一个字符是什么意思
int charPos = word.charAt(0) - 'a';
它实际上是什么意思,从字符中减去一个字母? 我想知道这是如何得到字母表中字符的位置。
我正在关注一个例子enter link description here,但我有一个小小的困惑。以下行意味着什么?从字符中减去一个字符是什么意思
int charPos = word.charAt(0) - 'a';
它实际上是什么意思,从字符中减去一个字母? 我想知道这是如何得到字母表中字符的位置。
它给出了字符(ASCII)表中相对于a
字符的位置。如果输入字符是小写字母,这也是字母表中的位置(基于零索引)。
实施例:
'Z' - 'a'
给你90 - 97 = -7
'b' - 'a'
给你98 - 97 = 1
'A' 在ASCII表是97, 'B' - 'A' 将相当于98 - 97 ,产生1,这是b在字母阵列中的位置(a是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é”。
顺便说一句,从许多几十种语言所使用的数十种书写系统(脚本)中,大约有120,000个“字母”,每种语言都有一些学习机构指定为字母表。
“明显错误”? ASCII是unicode的一个子集。 – Adrian
@adjan只有Unicode具有ASCII所具有的所有字符。在使用文本时,文本只能以一种编码存在,在这种情况下,ASCII不是。 'charAt'的用户应该明白它可以返回哪些值及其含义。 –
既然你低估了,你能告诉我我可以去哪里寻求帮助解决这个编码问题吗? – j2emanue