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

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

Java:如何獲取字符串數組中單詞的第n個字母

Java:如何獲取字符串數組中單詞的第n個字母

青春有我 2023-05-24 17:37:47
我需要編寫一個名為 getSuccessiveLetters(words) 的靜態方法,它接受一個字符串數組并返回一個字符串。如果字符串數組是 {"hello", "world"},那么程序應該返回“ho”?!癶”來自第一個單詞,“o”來自第二個單詞的第二個字母,依此類推。我設法獲得了 {"hello", "world"} 的正確返回值,但是如果字符串數組包含,例如,{"1st", "2nd", "3rd", "4th", "fifth"}它超出了掙扎的范圍。public class Template01 {    public static void main(String[] args) {        System.out.println(getSuccessiveLetters(new String[]{"1st", "2nd", "3rd", "4th", "fifth"}));     }public static String getSuccessiveLetters(String[] words) {    char Str[] = new char[words.length];    String successive;    for(int i = 0; i < words.length; i++){        successive = words[i];        if (i < successive.length()){              Str[i] = successive.charAt(i);        }        else        {            break;        }    }    successive = new String(Str);    return successive;}我期望返回值是 1nd,但實際輸出是 1nd\x00\x00。
查看完整描述

3 回答

?
翻閱古今

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

發生這種情況是因為當您初始化一個 char 數組時,它會用默認的 char 值填充該數組。
您可以在每次添加時使用StringBuilderList<Character>增加您的“陣列”。

改變

char[] str = new char[words.length];

StringBuilder str = new StringBuilder();

str[i] = successive.charAt(i);

str.append(successive.charAt(i));

然后在最后successive = str.toString();。


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

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;

}


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

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 - 但這取決于你給定的任務


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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