繁体   English   中英

java StringTokenizer意外结果

[英]java StringTokenizer unexpected results

我有以下代码将标记字符串以创建对象列表:

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#,#乔恩#,#176
2#,##杰克,#200
3#,麦#,#160

我得到的是 :1

乔恩

176
2

插口

200
3

吉米

160

如果我将内部分隔符改为某些东西它会正常工作为什么会发生这种情况?

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)

StrinTokenizer无法使用表达式作为分隔符,请尝试使用Scanner

    Scanner sc = new Scanner(test);
    sc.useDelimiter("#\\|#");
    while (sc.hasNext()) {
        System.out.println(sc.next());
    }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM