2016-03-07 55 views
0

我想管理StringTokenizerNoSuchElementException當用戶名或密碼字段未顯示,但我無法管理它。管理NoSuchElementException StringTokenizer

final StringTokenizer tokenizer = new StringTokenizer(
     usernameAndPassword, ":"); 

System.out.println(usernameAndPassword); 

while (tokenizer.hasMoreTokens()) { 
    String tmp1 = tokenizer.nextToken(); 

    if (tokenizer.nextToken() == null) { 
     System.out.println("pas d'username"); 
     username = ""; 
    } else { 
     username = tmp1; 
    } 

    String tmp2 = tokenizer.nextToken(); 

    if (tokenizer.nextToken() == null) { 
     System.out.println("pas de password"); 
     password = ""; 
    } else { 
     password = tmp2; 
    } 
} 

謝謝。

+0

的nextToken去除標記生成器的實際令牌(這是監守調用的nextToken你實際上移除的下一個標記所述第二時間是重要的),因此要卸下每while循環的每次迭代4個令牌。 https://docs.oracle.com/javase/8/docs/api/java/util/StringTokenizer.html#nextElement-- – AlexC

回答

0

在檢查是否有更多的令牌之前,您不能直接執行if (tokenizer.nextToken() == null)

你想使用if條件檢查什麼?難道不是if (StringUtils.isEmpty(tmp2))而不是if (tokenizer.nextToken() == null)

如果你想掃描下一組令牌,那麼你將不得不做一些像if(tokenizer.hasMoreTokens() && tokenizer.nextToken() != null)而不只是做tokenizer.nextToken(),因爲你不知道它是否有更多的令牌。

+0

我想管理該異常,因此不會顯示異常,而是替換密碼的值通過「」 – DiR95

+0

我明白,所以在你做'String tmp2 = tokenizer.nextToken();'''''''''''''''''''''''''''''''''您不必再次執行'tokenizer.nextToken()'。 – user2004685

+0

我修改,但我有同樣的錯誤 – DiR95

-1

使用這個代替:

final StringTokenizer tokenizer = new StringTokenizer(
     usernameAndPassword, ":"); 

System.out.println(usernameAndPassword); 

while(tokenizer.hasMoreTokens()){ 
    String tmp1 = tokenizer.nextToken(); 

    if (tmp1 == null){ 
     System.out.println("pas d'username"); 
     username = ""; 
    } 
    else{ 
     username = tmp1; 
    } 

    String tmp2 = tokenizer.nextToken(); 

    if (tmp2 == null){ 
     System.out.println("pas de password"); 
     password = ""; 
    } 
    else{ 
     password = tmp2; 
    } 
} 

當你intiliaze您的字符串標記它分裂與結腸癌的字符串。所以假設你有一個字符串A:B,它將被標記爲A和B.你可以使用nextToken()方法獲取值A和B.每當你調用這個方法時,指針就會進入下一個元素。在上面的代碼中,您使用此方法4次。 2次指針試圖獲取一個值但不成功,因此是例外。

謝謝

+1

我使用你的代碼修改了我的代碼,但是我總是發現NoSuchElementException錯誤... – DiR95

+0

然後你需要確保變量usernameAndPassword的值包含一個冒號,否則它必然會給出這個異常。讓我知道如果它仍然沒有幫助 – tarunajain

+0

我有一個冒號,但總是錯誤 – DiR95

0

您可以嘗試添加catch塊。

try { 
    final StringTokenizer tokenizer = new StringTokenizer(
      usernameAndPassword, ":"); 

    System.out.println(usernameAndPassword); 

    while(tokenizer.hasMoreTokens()){ 
     String tmp1 = tokenizer.nextToken(); 

     if (tmp1 == null){ 
      System.out.println("pas d'username"); 
      username = ""; 
     } 
     else{ 
      username = tmp1; 
     } 

     String tmp2 = tokenizer.nextToken(); 

     if (tmp2 == null){ 
      System.out.println("pas de password"); 
      password = ""; 
     } 
     else{ 
      password = tmp2; 
     } 
    } 

} catch (NoSuchElementException e) { 
    password = ""; 
}