问题: 给定一个字符串,取前两个字符并返回字符串,在前面和后面添加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;
}
感谢您的时间;
答案 0 :(得分:3)
字符的ascii总和:
对于您的第一个案例,i
包含ascii 105
而k
包含ascii 107
,因此其总和为212
。
请尝试str.subString(0, 2)
,而不是添加char
变量。
答案 1 :(得分:2)
您的方法会尝试将这些值总结为整数。您必须将第一项转换为字符串以避免此问题,或使用StringBuilder。
'L' = 76
'o' = 111
76 + 111 = 187
187 + "String" = "187String"
解决方案1:
返回Character.toString(第一个)+ second + str + first + second;
解决方案2:
StringBuilder builder = new StringBuilder();
builder.append(first);
builder.append(second);
builder.append(str);
builder.append(first);
builder.append(second);
return builder.toString();
答案 2 :(得分:2)
它以字符整数形式解释它们并添加它们。
您可以通过确保返回字符串来解决此问题:
return "" + first + second + str + first + second;
或者:
return (String) (first + second + str + first + second);
答案 3 :(得分:1)
以下是发生的事情。 return语句试图添加前两个字符,然后字符串进入图片,因此最后两个字符被正确解释为字符并添加到字符串中,而对于前两个字符,它们的ascii sum在开头添加。
答案 4 :(得分:0)
从类型转换到字节。第一个加号操作将被视为数字运算(字符代码将用作输入),它将为您提供数字,稍后将转换为字符串以附加到后面的字符串。如果你用""开始你的状态。 all + operation将被视为连接。