3 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
發(fā)生這種情況是因?yàn)楫?dāng)您初始化一個(gè) char 數(shù)組時(shí),它會(huì)用默認(rèn)的 char 值填充該數(shù)組。
您可以在每次添加時(shí)使用StringBuilder
或List<Character>
增加您的“陣列”。
改變
char[] str = new char[words.length];
到
StringBuilder str = new StringBuilder();
和
str[i] = successive.charAt(i);
到
str.append(successive.charAt(i));
然后在最后successive = str.toString();
。

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
這是因?yàn)楫?dāng)您忽略原始數(shù)組中不夠長(zhǎng)的字符串時(shí),您并沒有因此設(shè)置一些 char 數(shù)組元素。這意味著某些元素char的值為\0(默認(rèn)值為char)。因此,生成的字符串\0也有這些額外的字符。
我認(rèn)為在這里使用 aStringBuilder而不是 a更合適char[]:
public static String getSuccessiveLetters(String[] words) {
StringBuilder builder = new StringBuilder();
String successive;
for(int i = 0; i < words.length; i++){
successive = words[i];
if (i < successive.length()){
builder.append(successive.charAt(i));
}
// you should not break here, because there might be a longer string in the array later on.
// but apparently you don't want the "h" in "fifth"? Then I guess you should break here.
}
successive = builder.toString();
return successive;
}

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
我建議在這里使用單元測(cè)試。這可以幫助您改進(jìn)。
您正在此處創(chuàng)建一個(gè) charArray:
char Str[] = new char[words.length];
這個(gè)數(shù)組有你的字符串?dāng)?shù)組的長(zhǎng)度
new String[]{"1st", "2nd", "3rd", "4th", "fifth"}
這是 5
你為你的新數(shù)組創(chuàng)建了 3 個(gè)條目(因?yàn)槟阍诘谝粋€(gè)單詞處中斷,太短了)因此你得到 3 個(gè)字母“1nd”,并且你的數(shù)組中的其他 2 個(gè)插槽在調(diào)用時(shí)填充了空白
successive = new String(Str);
第一個(gè):考慮 break 語句第二個(gè):考慮使用 StringBuilder / StringBuffer 而不是 char[] 進(jìn)行匹配
恕我直言,最正確的結(jié)果應(yīng)該是1nd h - 但這取決于你給定的任務(wù)
添加回答
舉報(bào)