5 回答

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

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
要將 a 轉(zhuǎn)換char[]
為 a?String
,請(qǐng)調(diào)用String(char[] value)
構(gòu)造函數(shù):
char[] code = {'0', '1', '2', '3'};
String card = new String(code);
System.out.println(card); // prints: 0123
你的代碼永遠(yuǎn)不會(huì)工作,即使你解決了捕獲調(diào)用結(jié)果的問題replace
,如其他答案中所述,因?yàn)樵诘谝淮蔚鷷r(shí)card.charAt(i)
返回一個(gè)'x'
,所以replace(card.charAt(i), code[i])
意味著replace('x', '0')
,替換所有X,導(dǎo)致card = "0000"
.
第二次迭代:card = "1111"
第三次迭代:card = "2222"
第四次迭代:card = "3333"
如果要構(gòu)建字符串,請(qǐng)使用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貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
在 Java 中,字符串是不可變的,這意味著您無法更改它們。當(dāng)您調(diào)用它時(shí)String.replace()
,它實(shí)際上返回一個(gè)新字符串,而不是修改您的舊字符串。如果您想要一個(gè)內(nèi)容與數(shù)組中的內(nèi)容類似的字符串,請(qǐng)使用 String 構(gòu)造函數(shù),card = new String(code)
. 然后 String 將包含數(shù)據(jù)0123
。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
恕我直言,一種更簡(jiǎn)單的方法是使用 String 類提供的方法在一個(gè)語句中完成。
給出以下內(nèi)容:
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 數(shù)組轉(zhuǎn)換為 String。
在這種情況下,card.substring(code.length) 獲取從 4 開始的其余字符串。
然后將它們連接在一起。
如果你有一個(gè)字符串而不是一個(gè)字符數(shù)組,你可以直接使用它。
如果字符串比代碼數(shù)組長(zhǎng),此方法還會(huì)保留卡中的多余字符。

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
你為什么這樣做code.length - 1
?我的意思code.length
是實(shí)際上是你需要的。長(zhǎng)度從 1 in this string: 開始,到 2 in this string :。"a"
"ab"
所以實(shí)際上,單個(gè)字母的長(zhǎng)度code
不是從 0 開始,而是從單個(gè)字母的 1 開始。長(zhǎng)度實(shí)際上code.length
不是 code.length - 1
。
此外,正如其他人指出的那樣,字符串在 Java 中是不可變的。這意味著您無法更改它們。當(dāng)您String.replace()
這樣做時(shí),它會(huì)返回一個(gè)新字符串而不是更改的舊字符串。
所以這是循環(huán)中的正確代碼for
:
for(int i = 0; i < code.length; i++){ card = card.replace(card.charAt(i), code[i]); }
所以在這種情況下,我改變是card
因?yàn)槲覜]有使用這個(gè)replace
功能本身,我實(shí)際上改變card
了它的替代品。
首先,我所做的是更改card
為card.replace(card.charAt(i), code[i])
. 所以我仍然保留了原始字符串但對(duì)其進(jìn)行了更改,而不是創(chuàng)建新字符串。
添加回答
舉報(bào)