2017-05-28 189 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]