这就是任务:给定一个字符串,返回一个字符串,其中原始字符中的每个字符都有两个字符。
而且我不明白为什么它的输出是数字而不是字母,我试过不起作用?
public String doubleChar(String str) {
String s = "";
for(int i=0; i<str.length(); i++){
s += str.charAt(i) + str.charAt(i);
}
return s;
}
Run Code Online (Sandbox Code Playgroud)
预期:
doubleChar(“ The”)吗?“ Tthhee”
doubleChar(“ AAbb”)吗?“ AAAAbbbb”
输出:
doubleChar(“ The”)吗?“ 168208202”
doubleChar(“ AAbb”)吗?“ 130130196196”
Bob*_*ous 54
在Java中,char基本类型基本上只是一个映射到字符的数字值,因此,如果将两个char值加在一起,它们将产生一个数字,而不是另一个char(而不是a String),因此最终得到的int是a。
要解决此问题,您可以使用如下Character.toString(char)方法:
s += Character.toString(str.charAt(i)) + Character.toString(str.charAt(i))
Run Code Online (Sandbox Code Playgroud)
但这都是相当低效的,因为您是在循环中执行此操作,因此字符串连接会String不必要地生成许多对象。更有效的方法是使用a 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();
Run Code Online (Sandbox Code Playgroud)
Edw*_*ard 22
Java中的+运算符已重载,仅对Strings而不是chars 执行字符串连接。
从Java规范:
如果+运算符的任何一个操作数的类型为String,则该操作为字符串连接。
否则,+运算符的每个操作数的类型必须是可转换(第5.1.8节)为原始数字类型的类型,否则会发生编译时错误。
在您的情况下,将char转换为其原始值(int),然后添加。
而是使用StringBuilder.append(char)将它们串联到中String。
如果不关心性能,您甚至可以:
char c = 'A';
String s = "" + c + c;
Run Code Online (Sandbox Code Playgroud)
和 s += "" + c + c;
这将强制+ String串联运算符,因为它以String(“”)开头。上面的Java Spec给出了示例说明:
+运算符在语法上是左联想的,无论是通过类型分析确定是表示字符串串联还是数字加法。在某些情况下,需要小心以获得期望的结果。例如 [...]
1 + 2 + " fiddlers"是"3 fiddlers"但结果是:
"fiddlers " + 1 + 2是"fiddlers 12"
Lef*_*une 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;
}
Run Code Online (Sandbox Code Playgroud)
做您想要的事的更有效方法是:
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();
}
Run Code Online (Sandbox Code Playgroud)
您正在将两个字符的值相加。将串联更改String为:
s += str.charAt(i) + str.charAt(i);
Run Code Online (Sandbox Code Playgroud)
到:
s += str.charAt(i) + "" + str.charAt(i);
Run Code Online (Sandbox Code Playgroud)
这将确保字符转换为String.
注意:这是一个快速修复方法,您应该在循环内部连接StringBuilder时使用。String请参阅其他答案以了解如何完成此操作。
| 归档时间: |
|
| 查看次数: |
3183 次 |
| 最近记录: |