package test;import java.util.StringTokenizer;public class Test { /**
 * @param args
 */
public static void main(String args[]){
String str="abc def,dfdf:erefdf";
String name;
StringTokenizer token=new StringTokenizer(str);
for(int i=0; i<4;i++){
 name=null;
if(i==1)
name=token.nextToken(",");
if(i==2)
name=token.nextToken(":");
// if(i==3)
// name=token.nextToken("r");
if(name==null)
name=token.nextToken();
System.out.println("token="+name);
}
}
}
结果是:
token=abc
token= def
token=,dfdf
token=erefdf
为什么roken= def和token=,dfdf在字母前都分别有个空格和,号呢
为什么第四行就没有:号呢!!
这个是为什么阿!想了好久

解决方案 »

  1.   

    i=0
    由于直接采用nextToken()来分隔,默认的参数是\t\n\r\f和空格这五个来分隔的,
    所以第一次输出的是abc,当前位置停在了abc后面;i=1
    采用nextToken(","),分隔符变掉了,所以输出的是“空格和def”,当前位置停
    在了def后面;i=2
    又采用了nextToken(":"),分隔符又变掉了,使用半角冒号分隔,所以输出的是
    分隔后的第一个元素,即“,dfdf”,当前位置到了dfdf后面;i=3
    也就是最后一次的输出,由于没有更改分隔符,采用是nextToken(),此时的分隔
    符仍为i=2时的分隔符“:”,此时所输出的是以冒分分隔的第二组元素
    “(,dfdf):(erefdf)”(括号是假想上去的每一对括号表示一组,分隔符仅用于分
    隔字串不会输出的),由于当前位置的后面没有“:”了,所就输出了erefdf。也就是说使用nextToken()或者nextToken("")分隔时,不会输出当前的分隔符,而
    分隔符改变时所输出仅仅是上一次的分隔符。
      

  2.   

    if(name==null)
    name=token.nextToken(" "); 那个:就出来了!!啊门。ls的真详细啊