我试图编写一个方法,它将采用类似" abcd"的字符串。然后打印出每个字符两次,以便输出为" aabbccdd"。到目前为止,这是我的代码:
String abcd = "abcd";
String t = "";
for (int i = 0; i < abcd.length(); i++){
t = t + (abcd.charAt(i) + abcd.charAt(i));
}
for (int j = 0; j < abcd.length(); j++){
System.out.printf("%s\n",t);
}
上面的代码打印出数字,我不明白为什么。由于所有变量都是字符串,所以不打印字母吗?
答案 0 :(得分:4)
变量是字符串,但charAt
会返回一个char
,这是一种数字,然后您将这些数字加在一起,这会留下{{1} }。请改为使用StringBuilder
并将结果追加int
两次。
答案 1 :(得分:1)
请参阅Binary Numeric Promotion中的Java Language Specification。
当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示可转换为数字类型的值,以下规则适用:
如果任何操作数属于引用类型,则会进行拆箱转换。
- 醇>
应用扩展基元转换来转换以下规则指定的一个或两个操作数:
如果任一操作数的类型为double,则另一个操作数转换为double。
否则,如果任一操作数的类型为float,则另一个操作数转换为float。
否则,如果任一操作数的类型为long,则另一个操作数转换为long。
否则,两个操作数都将转换为int类型。
class Test {
public static void main(String[] args) {
int i = 0;
float f = 1.0f;
double d = 2.0;
// First int*float is promoted to float*float, then
// float==double is promoted to double==double:
if (i * f == d) System.out.println("oops");
// A char&byte is promoted to int&int:
byte b = 0x1f;
char c = 'G';
int control = c & b;
System.out.println(Integer.toHexString(control));
// Here int:float is promoted to float:float:
f = (b == 0) ? i : 4.0f;
System.out.println(1.0 / f);
}
}
对于您的特定用例,删除括号应该足够了。通过使用它们,您可以先强制添加char。
答案 2 :(得分:0)
只需删除这样的括号:
t = t + abcd.charAt(i) + abcd.charAt(i);
否则,使用char
检索时,charAt(i)
值会根据其ASCII值以数字方式添加。
答案 3 :(得分:0)
您可以将该行更改为
t += abcd.charAt(i) + (abcd.charAt(i) + "");
这样你就可以得到它的字符串值。
答案 4 :(得分:0)
公共课测试{
public static void main(String[] args) {
String s = "abcd";
String t ="";
for (int i = 0; i < s.length(); i++){
t = t + s.charAt(i) + s.charAt(i);
}
for (int j = 0; j < s.length(); j++){
System.out.printf("%s\n",t);
}
}
}
答案 5 :(得分:0)
好的,直接到代码:
String txt = "abcd";
StringBuilder sb = new StringBuilder();
char c;
for (int i = 0; i < txt.length(); i++){
c = txt.charAt(i);
sb.append(c).append(c);
}
System.out.printf("%s\n", sb.toString());
StringBuilder
- 当您要连接字符串或字符时,尤其是在连接长字符串时,请使用StringBuilder。每次附加时,它都不会创建字符串的副本。char:char数据类型是一个16位Unicode字符。它有 最小值'\ u0000'(或0)和最大值'\ uffff'(或 65,535(含))。
其中说明了因添加而收到的内容。
答案 6 :(得分:0)
String charDouble(String str){
StringBuilder sb = new StringBuilder();
for(int i=0; i< str.length(); i++){
sb.append(str.chatAt(i));
sb.append(str.charAt(i));
}
return sb.toString();
//Alternatively you could just print it here.
//System.out.println(sb.toString());
}