我有以下代码将标记字符串以创建对象列表:
import java.util.StringTokenizer;
public class TestStringTokenizer {
private final static String INTERNAL_DELIMETER = "#,#";
private final static String EXTERNAL_DELIMETER = "#|#";
public static void main(String[]aregs){
String test= "1#,#Jon#,#176#|#2#,#Jack#,#200#|#3#,#Jimmy#,#160";
StringTokenizer tokenizer = new StringTokenizer(test, EXTERNAL_DELIMETER);
while(tokenizer.hasMoreElements()){
System.out.println(tokenizer.nextElement());
//later will take this token and extract elements
}
}
}
我期望的输出是什么
1#,#Jon#,#176
2#,##杰克,#200
3#,麦#,#160
我得到的是:
1
,
乔恩
,
176个
2
,
杰克
,
200个
3
,
吉米
,
160个
如果我将内部分隔符更改为某些内容,例如,,它将正常工作 为什么会出现这种情况?
答案 0 :(得分:5)
AccordIng到StringTokenizer JavaDocs
http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html
StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人都使用String的split方法或java.util.regex包。
改为使用String.split:
String[] strArr = stringToSplit.split(INTERNAL_DELIMETER);
您需要做的唯一更改是EXTERNAL_DELIMETER中的or-pipe(“|”)是一个特殊的正则表达式字符,必须进行转义:“\\ |”。
可以在String.split Javadoc中找到更多信息:
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)
答案 1 :(得分:4)
StrinTokenizer无法使用表达式作为分隔符,请尝试使用扫描程序
Scanner sc = new Scanner(test);
sc.useDelimiter("#\\|#");
while (sc.hasNext()) {
System.out.println(sc.next());
}
答案 2 :(得分:3)
StrinTokenizer构造函数的第二个参数是分隔符(每个字符都是分隔符)
您可以使用String.split
public class TestStringTokenizer {
private final static String INTERNAL_DELIMETER = "#,#";
private final static String EXTERNAL_DELIMETER = "#|#";
public static void main(String[]aregs){
String test= "1#,#Jon#,#176#|#2#,#Jack#,#200#|#3#,#Jimmy#,#160";
for (String s : test.split("#\\|#"))
System.out.println(s);
}
}
}