我从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
- 然后我想把它拆分为'|' - 所以我可以得到单独的标记)
之后我想解析这个'|'字符。有没有更好的方法来做到这一点?
答案 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);
}
}
}
}