这是任务:给定一个字符串,返回一个字符串,其中原始字符中的每个字符都有两个字符。
我不明白为什么它的输出是数字而不是字母,我试过不起作用?
public String doubleChar(String str) {
String s = "";
for(int i=0; i<str.length(); i++){
s += str.charAt(i) + str.charAt(i);
}
return s;
}
预期:
doubleChar(“ The”)→“ TThhee”
doubleChar(“ AAbb”)→“ AAAAbbbb”
输出:
doubleChar(“ The”)→“ 168208202”
doubleChar(“ AAbb”)→“ 130130196196”
答案 0 :(得分:48)
在Java中,char
基本类型基本上只是一个映射到字符的数字值,因此,如果将两个char
值加在一起,它们将产生一个数字,而不是另一个char
(而不是String
),因此您最终看到的是int
。
要解决此问题,您可以像这样使用Character.toString(char)
method:
s += Character.toString(str.charAt(i)) + Character.toString(str.charAt(i))
但这都是相当低效的,因为您是在循环中执行此操作,因此字符串连接会不必要地生成许多String
对象。更有效的方法是使用StringBuilder
及其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();
答案 1 :(得分:19)
Java中的+运算符已重载,仅对String
而不是char
执行String连接。
来自Java Spec:
如果+运算符的任何一个操作数的类型为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"
答案 2 :(得分:12)
在将结果(现在为整数)连接到字符串之前,首先要添加char的数值。尝试使用打印语句进行调试:
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();
}
答案 3 :(得分:2)
您要将两个字符的值加在一起。从以下位置更改dsComponentes.Tables["Queue"].Columns["Tamanho_Fila"].DataType = typeof(int);
的串联:
String
收件人:
s += str.charAt(i) + str.charAt(i);
这将确保字符转换为s += str.charAt(i) + "" + str.charAt(i);
。
注意:这是一个快速解决方案,当String
在循环内部串联时,应使用StringBuilder
。有关其他操作方法,请参见其他答案。
答案 4 :(得分:2)
String.charAt()
返回一个char
(https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#charAt(int)),因此您要处理一个字符。使用一个char
,您可以像这样对它执行操作(它将显示“ 65”,即“ A”字符的ASCII值):
System.out.println('A' + 0);
您可以通过向'A'
加1来打印下一个字符(“ B”)的ASCII值,如下所示:
System.out.println('A' + 1);
要使代码正常工作(使每个字符加倍),有很多选项。您可以一次附加每个字符:
s += str.charAt(i);
s += str.charAt(i);
或将操作强制转换为字符串的各种方式:
s += "" + str.charAt(i) + str.charAt(i);