1

StringTokenizer.nextToken が null を返す場合はありますか? コードで NullPointerException をデバッグしようとしていますが、これまでに見つかった唯一の可能性は、nextToken() から返された文字列が null を返したことです。その可能性はありますか?Java doc には何も見つかりませんでした。

ありがとう

4

2 に答える 2

5

nextToken() は、トークナイザーの文字列にそれ以上トークンがない場合、NoSuchElementException をスローします。したがって、null を返さないと言えます。

http://download.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html#nextToken ()

于 2011-01-23T09:50:19.357 に答える
1

NullPointerException をスローできると思います。

nextToken() のコードを調べると、

public String nextToken() {
        /*
         * If next position already computed in hasMoreElements() and
         * delimiters have changed between the computation and this invocation,
         * then use the computed value.
         */

        currentPosition = (newPosition >= 0 && !delimsChanged) ?
            newPosition : skipDelimiters(currentPosition);

        /* Reset these anyway */
        delimsChanged = false;
        newPosition = -1;

        if (currentPosition >= maxPosition)
            throw new NoSuchElementException();
        int start = currentPosition;
        currentPosition = scanToken(currentPosition);
        return str.substring(start, currentPosition);
    }

ここで、skipDelimiters() メソッドを呼び出すと、NullPointerException がスローされる可能性があります。

private int skipDelimiters(int startPos) {
        if (delimiters == null)
            throw new NullPointerException();

        int position = startPos;
        while (!retDelims && position < maxPosition) {
            if (!hasSurrogates) {
                char c = str.charAt(position);
                if ((c > maxDelimCodePoint) || (delimiters.indexOf(c) < 0))
                    break;
                position++;
            } else {
                int c = str.codePointAt(position);
                if ((c > maxDelimCodePoint) || !isDelimiter(c)) {
                    break;
                }
                position += Character.charCount(c);
            }
        }
        return position;
    }
于 2011-01-23T10:03:30.130 に答える