5 回答

TA貢獻1772條經驗 獲得超5個贊
我期待 0123 的輸出,但是當我運行代碼時,它顯示原始字符串 xxxx,就好像 for 循環是無用的
在 Java 中,String 對象是不可變的。該replace
方法返回一個新的 String 對象,其中包含您需要的修改。
card = card.replace(card.charAt(i), code[i]);
Ps 另外,你的for
循環沒有覆蓋數組的最后一個元素。運行它i < code.length
。

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

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

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 開始的其余字符串。
然后將它們連接在一起。
如果你有一個字符串而不是一個字符數組,你可以直接使用它。
如果字符串比代碼數組長,此方法還會保留卡中的多余字符。

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
了它的替代品。
首先,我所做的是更改card
為card.replace(card.charAt(i), code[i])
. 所以我仍然保留了原始字符串但對其進行了更改,而不是創建新字符串。
添加回答
舉報