Java charAt() 返回随机整数而不是字母

时间:2021-06-13 18:36:24

标签: java charat

在关于“front22”问题的 CodingBat Java Warmup-1 上,它要求我返回一个字符串,其中前两个字母添加到前面和后面,就像这样。

front22("kitten") → "kikittenki"

这是我下面的代码,出于某种原因,前两个 charAt 返回数字而不是前两个字符。

public String front22(String str) {
    return (str.length() > 1)
        ? str.charAt(0) + str.charAt(1) + str + str.charAt(0) + str.charAt(1)
        :  str + str + str; 
}

返回:

front22("kitten") → "212kittenki"           
front22("Ha") → "169HaHa"        
front22("abc") → "195abcab"

为什么最后两个 charAt() 有效,而前两个给出了这些奇怪的数字?

2 个答案:

答案 0 :(得分:2)

因为 char 是 16 位整数类型。前几个 char(s) 被添加为整数(直到您遇到 String 项,然后它变成 String 连接)。基本上 + 有多种含义。使用 "" 作为第一项以强制评估为 String(s)。喜欢,

return (str.length() > 1)
    ? "" + str.charAt(0) + str.charAt(1) + str + str.charAt(0) + str.charAt(1)
    :  str + str + str; 

以任何其他方式将第一个术语设为 String。喜欢,

return (str.length() > 1)
    ? String.valueOf(str.charAt(0)) + str.charAt(1) + str + str.charAt(0) + str.charAt(1)
    :  str + str + str; 

答案 1 :(得分:1)

这是预期的结果,字符是数字......就像整数 你可以在查看ascii表时验证它的数值

enter image description here

所以当你做front22("kitten")

str.charAt(0) + str.charAt(1) 

您正在添加数字

在你的情况下,ascii 表中的 k+i:

<块引用>

107+105 = 212