有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从字符串创建子字符串数组

我有一个没有空格的字符串,我想创建一个由单词的子字符串组成的数组。例如,让字符串为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) 个答案

  1. # 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;
    
  2. # 2 楼答案

    您需要将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]
    
  3. # 3 楼答案

    您可以通过使用番石榴的Splitter显著缓解:

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

    您的代码有两个问题。首先,是“3”

    s.substring(i, 3)
    

    表示从字符串开头开始的第三个索引,而不是从i开始的第三个索引

    s.substring(i, i + 3)
    

    其次,如果字符串短于i+3,则会出现异常。要解决这个问题,你可以用数学。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;
    

    }