从ArrayList

时间:2016-05-10 03:40:34

标签: java string arraylist split tokenize

我从ArrayList返回一组字符串。

这是我在迭代ArrayList时获取字符串的方式。

Welcome|
To|
Stackoverflow|
;
Welcome|
To|
Zootopia|
;
This|
is|
last - String|
;

我想根据';'来标记字符串像这样,

这就是我所做的:

for(String str: arrayList) {
    //System.out.println(str);
    if(str.contains(";")) {
        StringTokenizer st = new StringTokenizer(str,";");
        while(st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }
    }
}

这就是我所期待的:

Welcome|To|Stackoverflow- one token
Welcome|To|Zootopia - one token
This|is|last-String|- one token

(因为让我们拿出第一个字符串:Welcome|To|Stackoverflow - 然后我想把它拆分为'|' - 所以我可以得到单独的标记)

之后我想解析这个'|'字符。有没有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

  

StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人都使用String的split方法或java.util.regex包。

class Tokenizer {
    //for Java older than 8
    public static String joinString(Iterable<String> strings, String separator) {
        StringBuilder sb = new StringBuilder();
        String sep = "";
        for(String s: strings) {
            sb.append(sep).append(s);
            sep = separator;
        }
        return sb.toString();                           
    }

    public static void main(String args[]) {
        ArrayList<String> strings = new ArrayList<String>() {{
            add("Welcome|");
            add("To|");
            add("Stackoverflow|");
            add(";");
            add("Welcome|");
            add("To|");
            add("Zootopia|");
            add(";");
            add("This|");
            add("is|");
            add("last - String|");
            add(";");
        }};

        //String in = String.join("", strings);
        String in = joinString(strings, "");

        for(String outerToken : in.split(";")) {
            System.out.println(outerToken);
            for(String innerToken : outerToken.split("\\|")) {
                System.out.println("\t" + innerToken);
            }
        }
    }
}