2016-03-07 54 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 = ""; 
}