char + String 给出奇怪的结果
char + String giving strange result
问题:
给定一个字符串,取前 2 个字符和 return 前后添加 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 的新手。抱歉,如果这是我不知道的非常简单或基本的事情 know.I 我可以通过以下方式完成,但只想知道我的第一个答案是怎么回事。
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"
解决方案一:
return Character.toString(第一) + 第二 + str + 第一 + 第二;
方案二:
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;
或者:
return (String) (first + second + str + first + second);
这是字符的 ascii 总和:
对于您的第一种情况,i
具有 ascii 105
,k
具有 ascii 107
,因此它们的总和为 212
。
尝试 str.subString(0, 2)
而不是添加 char
变量。
从类型转换到字节。第一个加号运算将被视为数值运算(字符代码将用作输入),它将为您提供数字,稍后将转换为字符串以附加到后续字符串。如果你用 "" 开始你的 statemetn,所有 + 操作将被视为连接。
这是正在发生的事情。 return 语句试图添加前两个字符,之后字符串出现,因此最后两个被正确解释为字符并添加到字符串中,而对于前两个,它们的 ascii 总和添加在开始。
问题:
给定一个字符串,取前 2 个字符和 return 前后添加 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 的新手。抱歉,如果这是我不知道的非常简单或基本的事情 know.I 我可以通过以下方式完成,但只想知道我的第一个答案是怎么回事。
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"
解决方案一:
return Character.toString(第一) + 第二 + str + 第一 + 第二;
方案二:
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;
或者:
return (String) (first + second + str + first + second);
这是字符的 ascii 总和:
对于您的第一种情况,i
具有 ascii 105
,k
具有 ascii 107
,因此它们的总和为 212
。
尝试 str.subString(0, 2)
而不是添加 char
变量。
从类型转换到字节。第一个加号运算将被视为数值运算(字符代码将用作输入),它将为您提供数字,稍后将转换为字符串以附加到后续字符串。如果你用 "" 开始你的 statemetn,所有 + 操作将被视为连接。
这是正在发生的事情。 return 语句试图添加前两个字符,之后字符串出现,因此最后两个被正确解释为字符并添加到字符串中,而对于前两个,它们的 ascii 总和添加在开始。