-2

arrayList文字列を分割する方法SCHOOLWORKBALCONYINSIST SALTPETER BOLTON KITSCHY CLIENTELE

それらの単語を「SCH」、「OOL」、「WO」、「RK」に分割したいと思います。

これが私のコードです

import java.io.File;
import java.util.ArrayList;

public class HW2 {

    public static ArrayList<String> getTiles(ArrayList<String> input_list_of_strings) {
        // create a substring by go through the loop first, then .... (instruction)
        Object[] subString = new Object[input_list_of_strings.size()];
        for (int i = 0; i < input_list_of_strings.size(); i++) {
            subString[i] = input_list_of_strings.get(i);
            // test just want to see if subString get all String
//          System.out.println(subString[i]);

            String delim=" ";
            String[] splitstrings = ((String) subString[i]).split(delim);
            for (int j = 0; j < splitstrings.length; j++) {
                splitstrings[j] +=delim;
                System.out.println(splitstrings[j]);
            }
        }
        return input_list_of_strings;       
        }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<String> input_words = new ArrayList<String>();
        input_words.add("SCHOOLWORK");
        input_words.add("BALCONY");
        input_words.add("INSIST");
        input_words.add("SALTPETER");
        input_words.add("BOLTON");
        input_words.add("KITSCHY");
        input_words.add("CLIENTELE");
        System.out.print(getTiles(input_words));    
    }

}

ありがとうございました...

4

2 に答える 2

0

まず、を繰り返しますArrayList<String>。ArrayListの単語ごとに、チャンクに分割します。上記の例はあまり意味がありません。「SCHOOLWORK」が「SCHOOL」と「WORK」ではなく「SCH」、「OOL」、「WO」、「RK」に分割されているのはなぜですか。要件の背後にあるロジックを理解していなくても、私たちが提供できるのは一般的な提案だけです。

だから基本的に:

// iterate through the arraylist
ArrayList<String> allWords; // instantiate this
...
for(String word : allWords) {
    splitWord(word);
}

splitWord(String)そして、単語を分割するために必要なロジックを適用するメソッドを作成します。substring()特定のサイズの単語が必要な場合は、Stringのメソッドを調べることをお勧めします。

于 2013-02-01T19:06:12.030 に答える
0

インターフェイスを使用して、各文字列を分割する方法をカプセル化します。

public static interface StringSplitter {
    public List<String> splitString(String s);
}

次に、「getTiles」メソッドは次のようになります。

public static ArrayList<String> getTiles(ArrayList<String> input,StringSplitter splitter) {

    int initSize = input.size();
    for(int i = 0; i < initSize; i++) {

        String source = input.remove(0); //Remove from head
        input.addAll(splitter.splitString(source)); //Add to end

    }

    return input;

}

注:このメソッドは元のリストを変更します。必要に応じて、リストを単純にコピーするように簡単に変更できます。とはいえ、私はこちらの方が好きです。

これらの単語を分割する正確なプロセスは不明であるため、単語を 3 文字で分割し続けたいと思います。ただし、1 文字しか残らない場合を除き、次に 2 文字で分割します。それ以外の場合は分割しないでください。したがって、デフォルトの「StringSplitter」は次のようになります。

public static final StringSplitter DEFAULT_SPLITTER = new StringSplitter() {

    @Override
    public List<String> splitString(String s) {
        List<String> subs = new ArrayList();
        while(!s.isEmpty()){
            int splitsize = 0;
            if(s.length() < 5) {
                if(s.length() == 4) {
                    splitsize = 2;
                } else {
                    splitsize = s.length();
                }
            } else {
                splitsize = 3;
            }
            subs.add(s.substring(0,splitsize));
            s = s.substring(splitsize);
        }
        return subs;
    }


};

あなたの主な方法は次のようになります:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    ArrayList<String> input_words = new ArrayList<String>();
    input_words.add("SCHOOLWORK");
    input_words.add("BALCONY");
    input_words.add("INSIST");
    input_words.add("SALTPETER");
    input_words.add("BOLTON");
    input_words.add("KITSCHY");
    input_words.add("CLIENTELE");
    System.out.print(getTiles(input_words),DEFAULT_SPLITTER); //Make sure to use DEFAULT_SPLITTER
}
于 2013-02-01T19:33:54.017 に答える