char + String给出了奇怪的结果

时间:2015-02-16 20:42:40

标签: java string char concatenation

问题: 给定一个字符串,取前两个字符并返回字符串,在前面和后面添加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;
}

感谢您的时间;

5 个答案:

答案 0 :(得分:3)

字符的ascii总和:
对于您的第一个案例,i包含ascii 105k包含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将被视为连接。