簡體   English   中英

從字符串創建子串數組

[英]Creating substrings array from a string

我有一個沒有空格的字符串,我想創建一個由單詞的子串組成的數組。 例如,讓字符串是stackoverflow數組應該是這樣的:

[堆棧溢出]

我使用的代碼如下,這確實只給了我第一項。 任何幫助將不勝感激。

public static ArrayList<String> getWords(String s){
    ArrayList<String> words = new ArrayList<String>();
    for(int i=0;i<s.length(); i=i+3){
        words.add(s.substring(i, 3));
    }
    return words;
}

您的代碼有兩個問題。 首先,“3”中

s.substring(i, 3)

表示從字符串開頭的第3個索引,而不是i的第3個索引,所以你想要的

s.substring(i, i + 3)

其次,如果字符串比i + 3短,你將得到一個例外。 要解決此問題,您可以使用Math.min。 它看起來像這樣:

public static ArrayList<String> getWords(String s){
ArrayList<String> words = new ArrayList<String>();
for(int i=0;i<s.length(); i=i+3){
    words.add(s.substring(i, Math.min(i + 3, i.length())));
}
return words;

}

您需要傳遞i + 3作為substring調用的第二個參數(它需要開始和結束索引)。 另外,我更喜歡編程到List接口。 您可以使用+=而不是i = i + 3 String中沒有三個字母時,你需要一個else子句。 喜歡,

public static List<String> getWords(String s) {
    List<String> words = new ArrayList<>();
    for (int i = 0; i < s.length(); i += 3) {
        if (i + 3 < s.length()) {
            words.add(s.substring(i, i + 3));
        } else {
            words.add(s.substring(i));
        }
    }
    return words;
}

然后,為了完整性,我用一個基本的main方法測試它

public static void main(String[] args) {
    System.out.println(getWords("stackoverflow"));
}

哪些輸出(根據要求)

[sta, cko, ver, flo, w]

你是在正確的軌道上,但你的substring應該是(i, i+3)如下:

public static ArrayList<String> getWords(String s){
    ArrayList<String> words = new ArrayList<String>();
    for(int i=0;i<s.length(); i+=3){
        if (i+3 >= s.length())
            words.add(s.substring(i));
        else
            words.add(s.substring(i, i+3));
    }
    return words;

您可以使用guava的Splitter顯着減輕它:

String f = "stackoverflow";
List<String> p = Splitter.fixedLength(3).splitToList(f);
System.out.println(p); // [sta, cko, ver, flo, w]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM