【问题标题】:How can I set a list of strings that were generated from a loop, into an array?如何将循环生成的字符串列表设置为数组?
【发布时间】:2023-03-08 18:44:01
【问题描述】:
public static String[] findWordsOfLength(String letters, int wordSize) {
    letters = "fourgooddogsswam";
    for(int i = 0; i < letters.length()-3;i++){
        String fourLetter = letters.substring(i,i+4);
    }
   for(int i = 0; i < letters.length()-4;i++){
        String fiveLetter = letters.substring(i,i+5);
    }

    return ?;
}

我想知道是否可以以某种方式将从此循环生成的字符串列表设置为字符串数组?如果我对不同的字符串使用多个循环,有没有办法可以返回该值?

【问题讨论】:

  • 使用 ArrayList 类,必要时再转换为 Array。除非你先算出数组的长度
  • 或者甚至不转换为数组,直接返回列表。
  • 有没有办法不用ArrayList?
  • 比利。可能是。但是这段代码首先应该做什么呢?

标签: java arrays string loops methods


【解决方案1】:

这是一个不涉及List 的答案。

根据输入,您可以预先计算数组的输出长度并使用给定的大小对其进行初始化。而不是你只是循环数组大小并再次使用数学从输入中提取子字符串。

public static void main(String[] args){
    String[] words = findWordsOfLength("fourgooddogsswam", 4);
    print(words);
}

public static String[] findWordsOfLength(String letters, int wordSize) {
    // your working and output array definition
    String[] words;
    // If not even dividable add one to the size
    if (letters.length() % wordSize == 0) {
        words = new String[letters.length() / wordSize];
    } else {
        words = new String[letters.length() / wordSize + 1];
    }
    for(int i = 0; i < words.length;i++){
        // To not run into IndexOutOfBound check if we´d be going out of bound
        if(i*wordSize + wordSize > letters.length()) {
            words[i] = letters.substring(i*wordSize);
        } else {
            words[i] = letters.substring(i*wordSize, i*wordSize+wordSize);
        }
    }
    return words;
} 

// Just prints
public static void print(String[] input) {
    for(String string : input) {
        System.out.println(string);
    }
}

O/P:

four
good
dogs
swam

【讨论】:

    【解决方案2】:

    正如 cmets 中建议的 Scary Wombat,在方法的开头,you can create an ArrayList。然后在每个循环迭代中,您可以继续添加它。在方法结束时,您可以使用toArray 方法将列表转换为数组。

    import java.util.ArrayList;
    import java.util.List;
    
    class Example {
    
        public static String[] findWordsOfLength(String letters, int wordSize) {
            if(letters == null) {
                return null;
            }
    
            int size = letters.length();
            int wordMax = size - wordSize + 1;
            if(size < wordMax || wordMax <= 0) {
                return new String[0];
            }
    
            List<String> result = new ArrayList<>();
    
            for (int i = 0; i < wordMax; i++) {
                result.add(letters.substring(i, i + wordSize));
            }
    
            return result.toArray(new String[0]);
        }
    
        public static void main(String[] args) {
            String[] word = findWordsOfLength("fourgooddogsswam", 4);
    
            for(String word : words) {
                System.out.println(word);
            }
    
            /**
            * Output in console:
            *
            * four
            * ourg
            * urgo
            * rgoo
            * good
            * oodd
            * oddo
            * ddog
            * dogs
            * ogss
            * gssw
            * sswa
            * swam
            */
        }
    }
    

    请注意,使用列表的好处是您无需提前知道其大小。另一方面,数组是用设定的大小初始化的。

    如果必须使用数组,you could do:

    public static String[] findWordsOfLength(String letters, int wordSize) {
        if(letters == null) {
            return null;
        }
    
        int size = letters.length();
        int wordMax = size - wordSize + 1;
        if(size < wordMax || wordMax <= 0) {
            return new String[0];
        }
    
        int j = 0;
        String[] result = new String[wordMax];
    
        for (int i = 0; i < wordMax; i++) {
            result[j ++] = letters.substring(i, i + wordSize);
        }
    
        return result;
    }
    

    【讨论】:

    • 我不想问,但你能更具体一点吗?在这种情况下,我将如何使用 ArrayList?谢谢
    • 有没有不使用数组列表的方法?
    • @Billy 列表的优点是它会随着您向其中添加项目而增长。另一方面,数组具有确定的大小,在初始化时确定。虽然,在这种特殊情况下,您似乎知道数组的大小。
    • 是的,但我不允许使用 ArrayLists,我还能怎么做?
    • @Billy 我添加了仅使用数组的第二个解决方案。
    猜你喜欢
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    相关资源
    最近更新 更多