如何将从循环生成的字符串列表设置为数组?

时间:2017-03-15 06:24:36

标签: java arrays string loops methods

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

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

2 个答案:

答案 0 :(得分:0)

在评论中建议的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;
}

答案 1 :(得分:0)

这是一个不涉及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