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條經驗 獲得超8個贊
您正在將兩個字符的值相加。從以下位置更改String
串聯:
s += str.charAt(i) + str.charAt(i);
到:
s += str.charAt(i) + "" + str.charAt(i);
這將確保字符轉換為String
.
注意:這是一個快速修復,您應該在循環內連接StringBuilder
時使用。String
請參閱其他答案以了解如何完成此操作。
添加回答
舉報