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

  • 相关阅读:
    课堂作业04 2017.10.27
    课程作业 03 动手动脑 2017.10.20
    课程作业 03 2017.10.20
    HDU 3974 Assign the task
    POJ 2155 Matrix
    POJ 2481 Cows
    HDU 3038 How Many Answers Are Wrong
    CS Academy Array Removal
    POJ_1330 Nearest Common Ancestors LCA
    CF Round 427 D. Palindromic characteristics
  • 原文地址:https://www.cnblogs.com/plxx/p/4533246.html
Copyright © 2011-2022 走看看