有什麼情況下StringTokenizer.nextToken將返回null? 我想在我的代碼中調試NullPointerException,到目前爲止,我發現的唯一可能性是從nextToken()返回的字符串返回null。這有可能嗎?沒有在java文檔中找到任何內容。java StringTokenizer - 可以nextToken返回null嗎?
感謝
有什麼情況下StringTokenizer.nextToken將返回null? 我想在我的代碼中調試NullPointerException,到目前爲止,我發現的唯一可能性是從nextToken()返回的字符串返回null。這有可能嗎?沒有在java文檔中找到任何內容。java StringTokenizer - 可以nextToken返回null嗎?
感謝
的nextToken()拋出NoSuchElementException異常,如果有在tokenizer的字符串中沒有更多標記;所以我會說它不會返回null。
http://download.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html#nextToken()
我認爲它可以拋出一個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;
}
你確定你沒有傳遞一個空字符串給構造函數嗎? countTokens()返回什麼? – Reno 2011-01-23 09:55:03
給StringTokenzier的構造函數?我不這麼認爲,這樣做會在構造函數本身中拋出NullPointerException,而這不是我的情況。 – duduamar 2011-01-23 10:03:07