2016-03-07 2 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 удаляет фактический маркер из Tokenizer (это важно becuase во второй раз вы называете nextToken вы фактически извлекая следующую лексему), так что вы удаляете 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

Я хочу управлять исключением, чтобы не отображать исключение, но заменять значение пароля by "" – DiR95

+0

Я так понимаю, поэтому после того, как вы выполните 'String tmp2 = tokenizer.nextToken();' вам просто нужно проверить, является ли 'tmp'' null 'или нет. Вам больше не нужно делать '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. Вы можете получить значения A и B с помощью метода nextToken(). Всякий раз, когда вы вызываете этот метод, указатель переходит к следующему элементу. В приведенном выше коде вы используете этот метод 4 раза. Через 2 раза указатель пытается получить значение, но не выполняет его и, следовательно, исключение.

Thanks

+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 = ""; 
}