【问题标题】:Split/Tokenize/Split string over set of strings returned from ArrayList在从 ArrayList 返回的字符串集上拆分/标记/拆分字符串
【发布时间】:2016-05-10 03:40:33
【问题描述】:

我得到一组从 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 - 然后我想进一步将其拆分为 '|' - 这样我可以获得单独的令牌)

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

【问题讨论】:

  • 到目前为止你做了什么?
  • 你希望你的最终输出是什么?
  • 想要“to tokenize”,所以你的意思是你想要连接字符串? --- 如果字符串已经分开,为什么要连接它们只是为了再次拆分它们?还是 "parse through this '|'" 有别的意思?
  • @Daniel,我根据您的评论更新了我的问题
  • @Andreas,感谢您引起我的注意。虽然,你会如何提出这样做​​的想法? - 刚刚从 ;然后从 | 拆分,不连接它们

标签: java string arraylist split tokenize


【解决方案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);
            }
        }
    }
}

【讨论】:

  • 感谢 StringTokenizer 信息,您的代码也可以正常工作 - 但我想知道我应该如何从 ';' 中断 - 当我的字符串是我添加到问题顶部的内容时.有什么想法吗?
  • 字符串类型的连接方法未定义
  • 你使用的java是8之前的吗?
  • 是的,我使用的是 Java 1.6,这似乎是在 Java 8 中引入的。很高兴知道这一点:)
猜你喜欢
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多