首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管理NoSuchElementException StringTokenizer

管理NoSuchElementException StringTokenizer
EN

Stack Overflow用户
提问于 2016-03-07 18:03:35
回答 3查看 824关注 0票数 0

当用户名或密码字段未显示但我无法管理时,我想管理StringTokenizer NoSuchElementException

代码语言:javascript
复制
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;
    }
}

谢谢。

EN

回答 3

Stack Overflow用户

发布于 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(),因为你不知道它是否有更多的令牌。

票数 0
EN

Stack Overflow用户

发布于 2016-03-07 20:59:52

您可以尝试添加catch块。

代码语言:javascript
复制
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 = "";
}
票数 0
EN

Stack Overflow用户

发布于 2016-03-07 18:51:23

改用下面的代码:

代码语言:javascript
复制
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次之后,指针试图获取一个值,但没有成功,因此出现了异常。

谢谢

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35840797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档