2011-01-23 79 views
1

有什麼情況下StringTokenizer.nextToken將返回null? 我想在我的代碼中調試NullPointerException,到目前爲止,我發現的唯一可能性是從nextToken()返回的字符串返回null。這有可能嗎?沒有在java文檔中找到任何內容。java StringTokenizer - 可以nextToken返回null嗎?

感謝

+0

你確定你沒有傳遞一個空字符串給構造函數嗎? countTokens()返回什麼? – Reno 2011-01-23 09:55:03

+0

給StringTokenzier的構造函數?我不這麼認爲,這樣做會在構造函數本身中拋出NullPointerException,而這不是我的情況。 – duduamar 2011-01-23 10:03:07

回答

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; 
    }