当用户名或密码字段未显示但我无法管理时,我想管理StringTokenizer NoSuchElementException。
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;
}
}谢谢。
发布于 2016-03-07 18:09:33
在检查是否有更多令牌之前,您不能直接执行if (tokenizer.nextToken() == null)。
您希望使用if条件检查什么?不应该是if (StringUtils.isEmpty(tmp2))而不是if (tokenizer.nextToken() == null)吗
如果你想扫描下一组令牌,那么你必须做一些像if(tokenizer.hasMoreTokens() && tokenizer.nextToken() != null)这样的事情,而不是仅仅做tokenizer.nextToken(),因为你不知道它是否有更多的令牌。
发布于 2016-03-07 20:59:52
您可以尝试添加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 = "";
}发布于 2016-03-07 18:51:23
改用下面的代码:
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;
}
}当你初始化你的字符串标记器时,它会用冒号拆分字符串。因此,假设您有一个字符串A: B,它将被标记为A和B。您可以使用nextToken()方法获取值A和B。无论何时调用此方法,指针都指向下一个元素。在上面的代码中,您将使用此方法4次。2次之后,指针试图获取一个值,但没有成功,因此出现了异常。
谢谢
https://stackoverflow.com/questions/35840797
复制相似问题