字符串标记器和管道符号

时间:2014-11-04 14:00:44

标签: java string stringtokenizer

    String s = "test -||- testing again -|- test_1 -||- testing again_1";
    StringTokenizer tokenizer = new StringTokenizer(s,"-|-");
    System.out.println(tokenizer.countTokens());

    while(tokenizer.hasMoreTokens()) {
        System.out.println(tokenizer.nextToken());
    }

输出:

4
test 
 testing again 
 test_1 
 testing again_1

计数不应该是2 ..?

我尝试打印令牌,并打印出所有字符串。不仅应将其视为一种象征。

我还从java API doc中读到了以下内容,

  

分隔符用于分隔标记。令牌是最大的   非分隔符的连续字符序列

如果是这种情况,不应该使用我的分隔符“ - | - ”将字符串拆分为2吗?

1 个答案:

答案 0 :(得分:6)

StringTokenizer使用分隔符字符,而不是您明显假设的分隔字符串。

因此,所有出现的任何分隔字符都会出现,并且会围绕它们进行标记。这会产生你得到的四个标记(省略空标记)。

如果您想通过分隔字符串拆分字符串,则必须使用带有正则表达式的String.split

String s = "test -||- testing again -|- test_1 -||- testing again_1";
String[] split = s.split("-\\|-"); // "|" is a special char in regex
System.out.println(split.length);

输出为“2”。