5 回答
TA贡献1880条经验 获得超4个赞
在 Java 中,char基本类型基本上只是一个映射到字符的数值,因此如果将两个char值加在一起,它们会产生一个数字而不是另一个char(而不是String),因此您最终会得到一个,int如您所见。
要解决此问题,您可以使用如下Character.toString(char)方法:
s += Character.toString(str.charAt(i)) + Character.toString(str.charAt(i))
但这一切都相当低效,因为您是在循环中执行此操作,因此字符串连接会产生很多String不必要的对象。更有效的方法是像这样使用 aStringBuilder及其方法:append(char)
StringBuilder sb = new StringBuilder(str.length() * 2);
for (int i = 0; i < str.length(); ++i) {
char c = str.charAt(i);
sb.append(c).append(c);
}
return sb.toString();
TA贡献1797条经验 获得超6个赞
为什么它输出整数?
+ 运算符在 Java 中被重载以仅对String
s 而不是char
s 执行字符串连接。
来自Java 规范:
如果 + 运算符的任一操作数类型为 String,则该操作为字符串连接。
否则,+ 运算符的每个操作数的类型必须是可转换(第 5.1.8 节)为基本数字类型的类型,否则会发生编译时错误。
在您的情况下, char 被转换为其原始值(int),然后添加。
相反,使用StringBuilder.append(char)
将它们连接成一个String
.
如果性能不是问题,你甚至可以这样做:
char c = 'A'; String s = "" + c + c;
和s += "" + c + c;
这将强制使用 +String
连接运算符,因为它以 ("") 开头String
。上面的 Java Spec 举例说明:
+ 运算符在句法上是左结合的,无论类型分析确定它是表示字符串连接还是数字加法。在某些情况下,需要小心才能获得所需的结果。例如 [...]
1 + 2 + " fiddlers"
是"3 fiddlers"
但结果是:
"fiddlers " + 1 + 2
是"fiddlers 12"
TA贡献1824条经验 获得超6个赞
在将结果(现在是整数)连接到字符串之前,您首先要添加字符的数值。尝试使用 print 语句进行调试:
public static String doubleChar(String str) {
String s = "";
for (int i = 0; i < str.length(); i++) {
System.out.println(str.charAt(i));
System.out.println(str.charAt(i) + str.charAt(i));
s += str.charAt(i) + str.charAt(i);
}
return s;
}
做你想做的更有效的方法是:
public static String doubleChar(String str) {
StringBuilder sb = new StringBuilder(str.length() * 2);
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
sb.append(c).append(c);
}
return sb.toString();
}
TA贡献1820条经验 获得超9个赞
String.charAt()
返回一个char
( https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#charAt(int) ) 所以你正在处理一个字符。使用 one char
,您可以像这样对其执行操作(这将打印“65”,这是“A”字符的 ASCII 值):
System.out.println('A' + 0);
您可以通过将 1 添加到 来打印下一个字符(“B”)的 ASCII 值'A'
,如下所示:
System.out.println('A' + 1);
要使您的代码正常工作——使每个字符加倍——有多种选择。您可以一次附加一个字符:
s += str.charAt(i); s += str.charAt(i);
或将操作转换为字符串的各种方式:
s += "" + str.charAt(i) + str.charAt(i);
TA贡献1725条经验 获得超7个赞
您正在将两个字符的值相加。从以下位置更改String
串联:
s += str.charAt(i) + str.charAt(i);
到:
s += str.charAt(i) + "" + str.charAt(i);
这将确保字符转换为String
.
注意:这是一个快速修复,您应该在循环内连接StringBuilder
时使用。String
请参阅其他答案以了解如何完成此操作。
添加回答
举报