首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误: NoSuchElementException

错误: NoSuchElementException
EN

Stack Overflow用户
提问于 2016-10-24 02:02:45
回答 1查看 38关注 0票数 1

此程序使用逗号分隔文本元素访问文本文件。元素注册在我创建的变量中。除了最后一个。然后就会发生错误。该程序与扫描器类的默认空格分隔符(文本文件被默认调整)很好地工作,但当我使用逗号作为分隔符时,程序会失败。有谁能提供一些洞察力。

文本数据:

代码语言:javascript
复制
smith,john,10
stiles,pat,12
mason,emrick,12

代码:

代码语言:javascript
复制
public void openFile(String f)
    {   
        try{
            x = new Scanner(new File(f));
            x.useDelimiter(",");
        } catch(Exception e){
            System.out.println("File could not be found please check filepath");
        }

    }

public boolean checkNameRoster()
    {
        openFile(file);
        boolean b = false;
        while(x.hasNext())
        {
            String lName = x.next().trim();
            **String fName = x.next().trim();**
            String grade = x.next().trim();
            if(fName.equalsIgnoreCase(firstName) && lName.equalsIgnoreCase(lastName) && grade.equalsIgnoreCase(grade))
                {
                    b = true;
                }
        }
        closeFile();
        return b;
    }
EN

回答 1

Stack Overflow用户

发布于 2017-09-04 20:02:39

这个问题取决于您在函数x.useDelimiter(",");中的Scanner上调用了openFile()

由于您的文本数据是:

代码语言:javascript
复制
smith,john,10
stiles,pat,12
mason,emrick,12

Scanner将其视为:

代码语言:javascript
复制
"smith,john,10\nstiles,pat,12\nmason,emrick,12"

所以,当您执行代码时会发生什么情况:

代码语言:javascript
复制
1: x.hasNext() ? Yes
    x.next().trim() => "smith"
    x.next().trim() => "john"
    x.next().trim() => "10\nstiles"
2: x.hasNext() ? Yes
    x.next().trim() => "pat"
    x.next().trim() => "12\nmason"
    x.next().trim() => "emrick"
3: x.hasNext() ? Yes
    x.next().trim() => "12"
    x.next().trim() => Error!

要解决这个问题,您可以编辑文件并使用,更改所有,,或者使用第一个Scanner获取所有行,另一个使用Scanner获取令牌,如下所示:

代码语言:javascript
复制
public void openFile(String f)
    {   
        try{
            x = new Scanner(new File(f)); // Leave default delimiter
        } catch(Exception e){
            System.out.println("File could not be found please check filepath");
        }

    }

public boolean checkNameRoster()
    {
        openFile(file);
        boolean b = false;
        while(x.hasNextLine()) // For each line in your file
        {
            Scanner tk = new Scanner(x.nextLine()).useDelimiter(","); // Scan the current line
            String lName = x.next().trim();
            String fName = x.next().trim();
            String grade = x.next().trim();
            if (fName.equalsIgnoreCase(firstName) && lName.equalsIgnoreCase(lastName) && grade.equalsIgnoreCase(grade))
                {
                    b = true;
                }
        }
        closeFile();
        return b;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40209754

复制
相关文章

相似问题

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