亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的字符串在我用+添加字符后變成了整數而不是字母?

為什么我的字符串在我用+添加字符后變成了整數而不是字母?

弒天下 2023-03-17 15:13:08
所以這是任務:給定一個字符串,返回一個字符串,其中原始字符串中的每個字符都有兩個字符。而且我不明白為什么它輸出的是數字而不是字母,我試過也不行?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"雙字符(“AAbb”)→“AAAAbbbb”輸出:doubleChar("The") → "168208202"雙字符(“AAbb”)→“130130196196”
查看完整描述

5 回答

?
慕村225694

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();


查看完整回答
反對 回復 2023-03-17
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

為什么它輸出整數?

+ 運算符在 Java 中被重載以僅對Strings 而不是chars 執行字符串連接。

來自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"


查看完整回答
反對 回復 2023-03-17
?
慕妹3242003

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();

}


查看完整回答
反對 回復 2023-03-17
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

String.charAt()返回一個charhttps://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);


查看完整回答
反對 回復 2023-03-17
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

您正在將兩個字符的值相加。從以下位置更改String串聯:

s +=  str.charAt(i) + str.charAt(i);

到:

s +=  str.charAt(i) + "" + str.charAt(i);

這將確保字符轉換為String.

注意:這是一個快速修復,您應該在循環內連接StringBuilder時使用。String請參閱其他答案以了解如何完成此操作。


查看完整回答
反對 回復 2023-03-17
  • 5 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號