2017-05-28 232 views
3

我有一個沒有空格的字符串,我想創建一個由該子串組成的數組。例如,讓該字符串是計算器陣列應該是這樣的:從字符串創建子串數組

[STA,CKO,VER,FLO,w]的

,我使用低於並且確實給該代碼我只有第一個項目。任何幫助將不勝感激。

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

您的代碼有兩個問題。首先,「3」

s.substring(i, 3) 

是指從字符串,而不是從我的第三個指標,開始的第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; 

}

1

您需要通過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] 
1

你是在正確的軌道上,但您的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; 
1

您可以通過使用顯著緩解它番石榴的Splitter

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