zoukankan      html  css  js  c++  java
  • StringTokenizer字符串分解器

    示例:

     StringTokenizer st = new StringTokenizer(key, ",", false);

            while (st.hasMoreTokens()) {
                if (userAgent.indexOf(st.nextToken()) != -1) {
                    return true;
                }

            }

    StringTokenizer 只有三个构造方法

       1. StringTokenizer(String str) :被分割对象str,分隔符采取默认分割,Java默认的分隔符是“空格”、“制表符(‘ ’)”、“换行符(‘ ’)”、“回车符(‘ ’)”。默认的话,所有的分隔符都会同时起作用。
       2. StringTokenizer(String str, String delim) :分隔符不采用默认,提供一个指定的分隔符。
       3. StringTokenizer(String str, String delim, boolean returnDelims) :指定一个特定的分隔符,同时,指定是否返回分隔符。如果是true,分隔符将被作为一个token返回。

    API原文描述:If the returnDelims flag is true, then the delimiter characters are also returned as tokens. Each delimiter is returned as a string of length one. If the flag isfalse, the delimiter characters are skipped and only serve as separators between tokens.

    方法也不多,只有6个:(所有的方法都是public型)

       int countTokens()  

       对于这个方法API的描述是这样的:Calculates the number of times that this tokenizer'snextToken method can be called before it generates an exception. The current position is not advanced. 

      它说计算nextToken方法在抛异常以前还能被调用的次数,当前索引不增加。

     其实就是说还有几个元素可以被遍历。返回的是 当前可以被访问的元素的个数。

    方法:

    boolean hasMoreTokens()

    boolean hasMoreElements()

    用来判断当前还有没有可以遍历的元素

    方法:

    Object nextElement()

    String nextToken()

    用来获得当前的元素token,一个返回String类型,一个返回Object类型

    还有一个方法:

     String nextToken(String delim)

     返回当前索引开始,指定分隔符的下一个token。实际返回的是索引当前位置到下一个delim出现为止所有的字符,见例子。

     无法想想出这个方法在什么情况下使用。

    StringTokenizer test = new StringTokenizer("J-PHONE,Vodafone,SoftBank",",");

    while(test.hasMoreTokens()){
    System.out.println("count0="+test.countTokens());
    System.out.println("carry"+test.nextToken());
    System.out.println("count1="+test.countTokens());
    //System.out.println("  " + test.nextToken("*"));
    }

    输出结果:

    count0=3
    carryJ-PHONE
    count1=2
    count0=2
    carryVodafone
    count1=1
    count0=1
    carrySoftBank
    count1=0

    如果代码换成element:

    while(test.hasMoreElements()){
    System.out.println("count0="+test.countTokens());
    System.out.println("obj" + test.nextElement());
    System.out.println("count1="+test.countTokens());
    }

    输出的结果是一样:

    count0=3
    objJ-PHONE
    count1=2
    count0=2
    objVodafone
    count1=1
    count0=1
    objSoftBank
    count1=0

    但是 需要注意是nextElement()返回是对象类型,不是String类型,需要根据需要转化下

    还要说一个StringTokenizer比较不好的地方,就是她的索引无法返回,一旦nextToken 就不能返回了,像上面两种写法同时存在的话,只有第一个循环能有数据输出,第二个循环是不能进去的。如果哪位大侠知道返回的方法请赐教。

    语句:

    System.out.println("count0="+test.countTokens());
    System.out.println("obj=" + test.nextElement());
    System.out.println("next=" + test.nextToken("*"));
    System.out.println("count1="+test.countTokens());

    输出结果:

    count0=2
    obj=J-PHONE
    next=,Vodafone
    count1=1

    转自:http://blog.csdn.net/laoma4102/article/details/7084394

  • 相关阅读:
    flask 非要将视图和app放在一个空间
    spring mvc 实用的思想
    不能在windows上使用但值得关注的项目
    AI 医疗
    我也是混乱了同步盘和网盘
    常用free文献数据库
    机器学习中如何处理不平衡数据?
    自己制作的学习笔记视屏,还有记录的代码。
    函数的指针(一)写一个能对任意数组排序的冒泡排序
    自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理
  • 原文地址:https://www.cnblogs.com/zuizui1204/p/7211108.html
Copyright © 2011-2022 走看看