写了一个测试程序
import java.util.*;public class TestString
{
public static void main(String[] args) 
{
        String a = "dbse*23df*s";
        StringTokenizer nizer=new StringTokenizer(a,"*2",false);
        while (nizer.hasMoreTokens())
        {
            String str=nizer.nextToken();
            System.out.println(str);
        }
}
}
发现输出结果为
dbse
3df
s
好象你的猜想是正确的,只匹配了第一个字符!

解决方案 »

  1.   

    我在楼上基础上
    import java.util.*;public class TestString {
        public static void main(String[] args) {
            String a = "dbse*23df*s***32*2*2*";
            StringTokenizer nizer = new StringTokenizer(a, "*2", false);
            while (nizer.hasMoreTokens()) {
                String str = nizer.nextToken();
                System.out.println(str);
            }
        }
    }
    结果
    dbse
    3df
    s
    3s2和2s真的是被标识为相同的Token
      

  2.   

    我又做了几个实验
    终于了解只要出现在
    delim参数(就是作为分隔符的参数,上例中"*2")里的所有字符都作为delim
    可以试在nizer中添加3,d就明白了
      

  3.   

    我们其实从API文档中就能看出来StringTokenizer的特性。以下是它的一个构造方法(除此之外还有2个重载的构造方法,自己看吧):public StringTokenizer(String str, String delim)Constructs a string tokenizer for the specified string. The characters in the delim argument are the delimiters for separating tokens. Delimiter characters themselves will not be treated as tokens. Parameters:
    str - a string to be parsed.
    delim - the delimiters.这里面清楚地说明了delim的处理方式:按character字符的形式对待。据我所知,StringTokenizer类的标准API好像没有对楼主这个想法有太好的支持,解决方案有两个:1、在StringTokenizer基础上自己构建一个新的方法来处理;
    2、使用正则表达式。
      

  4.   

    其实StringTokenizer这样设计是很有道理的。我们来考虑一下下面这个例子:我们有一个
    String str = "abcdcdcd";如果我么希望分隔符是作为整体的字符串"cdc"或者"dcd",那么我们该怎样确定和划分token就不明确了。ab
      cdc
        cdc
           d还是abc
       dcd
         dcd都会有字符重叠现象。对于楼主的实际问题,稍微改一改,加一个判断应该就好了,但那一定不是一变应万变的良策。
      

  5.   

    其实从根本上避免用tokenizer而用String.split就好了
    stringtokenizer本来就是sun不推荐继续使用的
    它的存在价值只不过是兼容老代码而已