split/tokenize/split string覆盖从arraylist返回的字符串集

tez616oj  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(385)

我正在从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 -然后进一步我想在“|”上拆分它-这样我就可以得到单独的令牌)
之后,我想通过这个“|”字符进行解析。有没有更好的办法?

fsi0uk1n

fsi0uk1n1#

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

相关问题