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

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

有沒有辦法通過選項卡中的字符一個一個地更改字符串的字符?

有沒有辦法通過選項卡中的字符一個一個地更改字符串的字符?

呼如林 2023-05-24 14:46:49
我的主要目的是將選項卡中存儲的字符存儲為String相同長度的字符。所以我嘗試的是使用循環和方法String用選項卡中相同位置的字符替換 I 在開頭聲明的每個字符。forreplace(oldChar, newChar)public static void main(String[] args) {  String card = "xxxx";  char[] code = {'0', '1', '2', '3',};  for (int i = 0; i < code.length-1; i++) {    card.replace(card.charAt(i), code[i]);  }  System.out.println(card);}我期望 的輸出0123,但是當我運行代碼時,它顯示原始字符串值 ( xxxx),就好像for循環沒有用一樣。
查看完整描述

5 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

我期待 0123 的輸出,但是當我運行代碼時,它顯示原始字符串 xxxx,就好像 for 循環是無用的

在 Java 中,String 對象是不可變的。該replace方法返回一個新的 String 對象,其中包含您需要的修改。

card = card.replace(card.charAt(i), code[i]);

Ps 另外,你的for循環沒有覆蓋數組的最后一個元素。運行它i < code.length。


查看完整回答
反對 回復 2023-05-24
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

要將 a 轉換char[]為 a?String,請調用String(char[] value)構造函數:

char[] code = {'0', '1', '2', '3'};

String card = new String(code);

System.out.println(card); // prints: 0123

你的代碼永遠不會工作,即使你解決了捕獲調用結果的問題replace,如其他答案中所述,因為在第一次迭代時card.charAt(i)返回一個'x',所以replace(card.charAt(i), code[i])意味著replace('x', '0'),替換所有X,導致card = "0000".
第二次迭代:card = "1111"
第三次迭代:card = "2222"
第四次迭代:card = "3333"

如果要構建字符串,請使用StringBuilder

char[] code = {'0', '1', '2', '3'};

StringBuilder buf = new StringBuilder("xxxx");

for (int i = 0; i < code.length; i++)?

? ? buf.setCharAt(i, code[i]);

String card = buf.toString();

System.out.println(card); // prints: 0123

或者:


StringBuilder buf = new StringBuilder();

for (int i = 0; i < code.length; i++)?

? ? buf.append(code[i]);


查看完整回答
反對 回復 2023-05-24
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

在 Java 中,字符串是不可變的,這意味著您無法更改它們。當您調用它時String.replace(),它實際上返回一個新字符串,而不是修改您的舊字符串。如果您想要一個內容與數組中的內容類似的字符串,請使用 String 構造函數,card = new String(code). 然后 String 將包含數據0123。



查看完整回答
反對 回復 2023-05-24
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

恕我直言,一種更簡單的方法是使用 String 類提供的方法在一個語句中完成。


給出以下內容:


      String card = "xxxx";

      char[] code = { '0', '1', '2', '3',

      };

你可以這樣做。


      card = String.valueOf(code) + card.substring(code.length);

      System.out.println(card);  // prints 0123

它的工作方式是。


String.valueOf(code) 將 char 數組轉換為 String。

在這種情況下,card.substring(code.length) 獲取從 4 開始的其余字符串。

然后將它們連接在一起。

如果你有一個字符串而不是一個字符數組,你可以直接使用它。


如果字符串比代碼數組長,此方法還會保留卡中的多余字符。


查看完整回答
反對 回復 2023-05-24
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

你為什么這樣做code.length - 1?我的意思code.length是實際上是你需要。長度從 1 in this string: 開始,到 2 in this string :。"a""ab"

所以實際上,單個字母的長度code不是從 0 開始,而是從單個字母的 1 開始。長度實際上code.length 不是 code.length - 1。

此外,正如其他人指出的那樣,字符串在 Java 中是不可變的。這意味著您無法更改它們。當您String.replace()這樣做時,它會返回一個新字符串而不是更改的舊字符串。

所以這是循環中的正確代碼for

for(int i = 0; i < code.length; i++){
  card = card.replace(card.charAt(i), code[i]);
}

所以在這種情況下,我改變是card因為我沒有使用這個replace功能本身,我實際上改變card了它的替代品。

首先,我所做的是更改cardcard.replace(card.charAt(i), code[i]). 所以我仍然保留了原始字符串但對其進行了更改,而不是創建新字符串。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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