2016-05-10 121 views
-3

我正在从ArrayList返回一组字符串。SplitList/Tokenize/Split字符串从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 

(因为让我们这样第一个String:Welcome|To|Stackoverflow - 再往我想分割'|' - 所以我可以得到单独的令牌)

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

+1

到目前为止你做了什么? – Daniel

+0

你期望你的最终产出是什么? – Daniel

+1

通过希望*“来标记”*,所以你的意思是你想*连接*字符串? ---如果字符串已经分离,为什么连接它们只是为了再次分割它们?或者“*”通过这个'|''解析*是否意味着别的? – Andreas

回答

1

StringTokenizer是遗留的类,由于兼容性的原因而被保留,尽管它在新代码中的使用不受欢迎。建议任何寻求此功能的人使用String或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); 
      } 
     } 
    } 
} 
+0

感谢您的StringTokenizer信息和您的代码工作正常 - 但我想知道我应该如何摆脱';' - 当我的字符串是我已经添加到顶部我的问题。有任何想法吗? – inityk

+0

我已经更新了我的答案。 –

+0

连接方法未定义为类型字符串 – inityk