给出奇怪结果的java字符+字符串
问题:
给定一个字符串,取前2个字符并返回该字符串,在前面和后面添加2个字符,因此“kitten”生成“kikittenki”。如果字符串长度小于2,则使用任何字符
front22("kitten") → "kikittenki"
front22("Ha") → "HaHaHa"
front22("abc") → "ababcab"
我的答覆是:
public String front22(String str) {
if(str.length() > 2) {
char first = str.charAt(0);
char second = str.charAt(1);
return first + second + str + first + second;
}
return str + str + str;
}
Results:
Expected Run results
front22("kitten") → "kikittenki" "212kittenki" X
front22("Ha") → "HaHaHa" "HaHaHa" OK
front22("abc") → "ababcab" "195abcab" X
front22("ab") → "ababab" "ababab" OK
front22("a") → "aaa" "aaa" OK
front22("") → "" "" OK
front22("Logic") → "LoLogicLo" "187LogicLo" X
那么,我的产出前面的数字,即212、195和187是从哪里来的呢?我是JAVA新手。对不起,如果这是一些非常简单或基本的,我不知道。我知道我可以用下面的方法来做,但我只想知道我的第一个答案是怎么回事
public String front22(String str) {
if(str.length() > 2){
return str.substring(0,2) + str + str.substring(0,2);
}
return str + str + str;
}
# 1 楼答案
它以字符整数的形式解释它们并将它们相加
您可以通过确保返回字符串来修复此问题:
或:
# 2 楼答案
您的方法尝试将这些值像整数一样求和。必须将第一项转换为字符串以避免此问题,或者使用StringBuilder
解决方案1:
返回字符。toString(first)+second+str+first+second
解决方案2:
# 3 楼答案
这是字符的ascii和:
对于第一种情况,
i
有ascii105
,k
有ascii107
,所以它们的和是212
尝试
str.subString(0, 2)
而不是添加char
变量# 4 楼答案
从类型转换到字节。第一个加号运算将被视为numerical运算(字符代码将被用作输入),它将为您提供数字,稍后将转换为字符串并附加到下面的字符串。如果用“”启动statemetn,则所有+操作将被视为串联
# 5 楼答案
下面是正在发生的事情。return语句试图添加前两个字符,然后字符串进入图片,因此最后两个字符被正确解释为字符并添加到字符串中,而前两个字符的ascii和被添加到开头