char + String 给出奇怪的结果

Posted

技术标签:

【中文标题】char + String 给出奇怪的结果【英文标题】:char + String giving strange result 【发布时间】:2015-04-17 11:14:45 【问题描述】:

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

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

【讨论】:

【参考方案2】:

从类型转换到字节。第一个加号运算将被视为数字运算(字符代码将用作输入),它将为您提供数字,稍后将转换为字符串以附加到后面的字符串。如果你用 "" 开始你的语句,所有 + 操作将被视为连接。

【讨论】:

【参考方案3】:

这是字符的ascii总和: 对于您的第一种情况,i 具有 ascii 105k 具有 ascii 107 所以它们的总和是 212。 尝试str.subString(0, 2) 而不是添加char 变量。

【讨论】:

谢谢。我只是想知道这些数字来自哪里以及为什么。这完美地解释了它。【参考方案4】:

它以字符整数形式解释它们并添加它们。

您可以通过确保返回一个字符串来解决此问题:

return "" + first + second + str + first + second;

或者:

return (String) (first + second + str + first + second);

【讨论】:

它像第一个一样将其转换为字符串,除了第一个被隐式转换,第二个被显式转换。我不确定它的细节。【参考方案5】:

您的方法尝试将这些值(如整数)相加。您必须将第一项转换为字符串以避免此问题,或使用 StringBuilder。

'L' = 76
'o' = 111
76 + 111 = 187
187 + "String" = "187String"

解决方案 1:

return Character.toString(first) + 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();

【讨论】:

以上是关于char + String 给出奇怪的结果的主要内容,如果未能解决你的问题,请参考以下文章

String.charAt()在java中返回奇怪的结果

当 UIAlertView 存在时,没有动画的方向会给出奇怪的结果

奇怪的结果增加一个超过其最大值的空头

Android OpenCV:颜色检测给出奇怪的结果

NSDateComponents 给出奇怪的结果

useState 与数组给出奇怪的结果