从字符串创建子串数组

时间:2017-05-28 20:22:45

标签: java arrays arraylist

我有一个没有空格的字符串,我想创建一个由单词的子串组成的数组。例如,让字符串为 stackoverflow 数组应该是:

  

[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;
}

4 个答案:

答案 0 :(得分:3)

您的代码存在两个问题。首先,&#34; 3&#34;在

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;

}

答案 1 :(得分:1)

您需要传递i + 3作为substring调用的第二个参数(它需要开始和结束索引)。另外,我更喜欢编程到List界面。您可以使用+=代替i = i + 3。如果else中没有三个字母,则需要String条款。像,

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]

答案 2 :(得分: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;

答案 3 :(得分:1)

您可以使用番石榴Splitter

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