zoukankan      html  css  js  c++  java
  • 一天一个类 --- StringTokenizer

    这是一个将字符串按照指定的delimiters(分隔符)进行分割的类。

    首先看看他的构造函数:

        public StringTokenizer(String str, String delim, boolean returnDelims) {
            currentPosition = 0;
            newPosition = -1;
            delimsChanged = false;
            this.str = str;
            maxPosition = str.length();
            delimiters = delim;
            retDelims = returnDelims;
            setMaxDelimCodePoint();
        }
        public StringTokenizer(String str, String delim) {
            this(str, delim, false);
        }

    默认是不返回delimiters的。

      public StringTokenizer(String str) { this(str, " f", false); } 

    这个是个默认的构造函数,其中使用的默认的delimiter是 " f"

    2、遍历边界 

        public boolean hasMoreTokens() {
            /*
             * Temporarily store this position and use it in the following
             * nextToken() method only if the delimiters haven't been changed in
             * that nextToken() invocation.
             */
            newPosition = skipDelimiters(currentPosition);
            return (newPosition < maxPosition);
        }

    查看是不是还有其他的分割串,这个通常作为遍历这个字符串是否结束的判断条件

    3、获取每一个分割串

     1     public String nextToken() {
     2         /*
     3          * If next position already computed in hasMoreElements() and
     4          * delimiters have changed between the computation and this invocation,
     5          * then use the computed value.
     6          */
     7 
     8         currentPosition = (newPosition >= 0 && !delimsChanged) ?
     9             newPosition : skipDelimiters(currentPosition);
    10 
    11         /* Reset these anyway */
    12         delimsChanged = false;
    13         newPosition = -1;
    14 
    15         if (currentPosition >= maxPosition)
    16             throw new NoSuchElementException();
    17         int start = currentPosition;
    18         currentPosition = scanToken(currentPosition);
    19         return str.substring(start, currentPosition);
    20     }

    上面最后一句代码可以看出,使用的是字符串的一些操作,就是返回相应的字串。

    这里还有一个特殊的方法,返回指定delimiter分割串

        public String nextToken(String delim) {
            delimiters = delim;
    
            /* delimiter string specified, so set the appropriate flag. */
            delimsChanged = true;
    
            setMaxDelimCodePoint();
            return nextToken();
        }

    4、查看该字串串被分为了多少个字串

        public int countTokens() {
            int count = 0;
            int currpos = currentPosition;
            while (currpos < maxPosition) {
                currpos = skipDelimiters(currpos);
                if (currpos >= maxPosition)
                    break;
                currpos = scanToken(currpos);
                count++;
            }
            return count;
        }

    此时,如果没有指定delimiter的话,将会返回0

  • 相关阅读:
    unbuntu系统下在文件中按上下左右出现错误码
    构建之法阅读笔记
    cloudera卸载
    第二阶段团队站立会议04
    第二阶段团队站立会议03
    第二阶段团队站立会议02
    第二阶段团队站立会议01
    团队测试
    cnblogs.com的用户体验
    对于每个小组的意见
  • 原文地址:https://www.cnblogs.com/plxx/p/4533246.html
Copyright © 2011-2022 走看看