Java char+;给出奇怪结果的字符串

Java char+;给出奇怪结果的字符串,java,string,char,concatenation,Java,String,Char,Concatenation,问题: 给定一个字符串,取前2个字符并返回该字符串,在前面和后面添加2个字符,因此“kitten”生成“kikittenki”。如果字符串长度小于2,则使用任何字符 front22("kitten") → "kikittenki" front22("Ha") → "HaHaHa" front22("abc") → "ababcab" 我的答覆是: public String front22(String str) { if(str.length() > 2

问题: 给定一个字符串,取前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;
}

谢谢你的时间

您的方法尝试将这些值像整数一样求和。必须将第一项转换为字符串以避免此问题,或者使用StringBuilder

'L' = 76
'o' = 111
76 + 111 = 187
187 + "String" = "187String"
解决方案1:

StringBuilder builder = new StringBuilder();
builder.append(first);
builder.append(second);
builder.append(str);
builder.append(first);
builder.append(second);
return builder.toString();
返回字符.toString(第一个)+第二个+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();

它以字符整数的形式解释它们并将它们相加

您可以通过确保返回字符串来修复此问题:

return "" + first + second + str + first + second;
或:


这是字符的ascii和:
对于第一种情况,
i
具有ascii
105
k
具有ascii
107
,因此它们的总和为
212


尝试
str.subString(0,2)
而不是添加
char
变量。

从类型转换到字节。第一个加号运算将被视为numerical运算(字符代码将被用作输入),它将为您提供数字,稍后将转换为字符串并附加到下面的字符串。如果用“”启动statemetn,则所有+操作将被视为串联操作。

下面是发生的情况。return语句试图添加前两个字符,然后字符串进入图片,因此最后两个字符被正确解释为字符并添加到字符串中,而前两个字符的ascii和被添加到开头

谢谢。我只是想知道这些数字是从哪里来的,为什么。这很好地解释了这一点,它将其转换为字符串,就像第一个一样,除了第一个是隐式转换,第二个是显式转换。我不确定它的细节。