3 回答

TA貢獻1780條經驗 獲得超5個贊
發生這種情況是因為當您初始化一個 char 數組時,它會用默認的 char 值填充該數組。
您可以在每次添加時使用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貢獻1874條經驗 獲得超12個贊
這是因為當您忽略原始數組中不夠長的字符串時,您并沒有因此設置一些 char 數組元素。這意味著某些元素char的值為\0(默認值為char)。因此,生成的字符串\0也有這些額外的字符。
我認為在這里使用 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貢獻1993條經驗 獲得超6個贊
我建議在這里使用單元測試。這可以幫助您改進。
您正在此處創建一個 charArray:
char Str[] = new char[words.length];
這個數組有你的字符串數組的長度
new String[]{"1st", "2nd", "3rd", "4th", "fifth"}
這是 5
你為你的新數組創建了 3 個條目(因為你在第一個單詞處中斷,太短了)因此你得到 3 個字母“1nd”,并且你的數組中的其他 2 個插槽在調用時填充了空白
successive = new String(Str);
第一個:考慮 break 語句第二個:考慮使用 StringBuilder / StringBuffer 而不是 char[] 進行匹配
恕我直言,最正確的結果應該是1nd h - 但這取決于你給定的任務
添加回答
舉報