-2

如何拆分 arrayList String SCHOOLWORK BALCONY INSIST 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”被分成“SCH”、“OOL”、“WO”、“RK”而不是“SCHOOL”和“WORK”?在不了解您的要求背后的逻辑的情况下,我们只能提供一般性建议。

所以,基本上:

// 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;

}

注意:此方法修改原始列表,如果需要,它可以很容易地调整为简单地复制列表。虽然,我更喜欢这种方式。

由于拆分这些单词的确切过程尚不清楚,我猜你想继续将一个单词拆分为三个字符,除非只留下一个字符,然后拆分为两个 - 否则不要拆分。因此,您的默认“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 回答