Java 代码已编译,但我没有收到任何TouchElementException错误

Java 代码已编译,但我没有收到任何TouchElementException错误,java,exception,exception-handling,stringtokenizer,Java,Exception,Exception Handling,Stringtokenizer,这个程序假设取一个人的名字,性别和人数,这个名字和单独的名字在一个字符串中,性别成一个字符,名字的人数成一个整数。有名字的人数已经计算出来了,我只需要把每个人分成正确的类别。 问题是代码已经编译了,但我得到了一个NoTouchElementException错误 文件如下所示: 约翰,M,416 莎拉,F,414 迈克,M,413 凯特,F,413 ArrayList<OneName> oneName = new ArrayList<OneName>();

这个程序假设取一个人的名字,性别和人数,这个名字和单独的名字在一个字符串中,性别成一个字符,名字的人数成一个整数。有名字的人数已经计算出来了,我只需要把每个人分成正确的类别。 问题是代码已经编译了,但我得到了一个NoTouchElementException错误

文件如下所示:

约翰,M,416

莎拉,F,414

迈克,M,413

凯特,F,413

    ArrayList<OneName> oneName = new ArrayList<OneName>();
    while(sc.hasNextLine())
    {

    // read a line from the input file via sc into line
        line = sc.nextLine();
        String[] fields =line.split(",");


        StringTokenizer stk = new StringTokenizer(line);
        String name = stk.nextToken();
        char sex = stk.nextToken().charAt(0);
        int count = Integer.parseInt(stk.nextToken());


        OneName list = new OneName(name, sex, count);

        oneName.add(list);      


    }
   String personSex = oneName.get(0).getName();
    System.out.println(personSex);
    }
ArrayList oneName=new ArrayList();
while(sc.hasNextLine())
{
//通过sc将输入文件中的一行读取到第行
line=sc.nextLine();
String[]fields=line.split(“,”);
StringTokenizer stk=新的StringTokenizer(行);
字符串名称=stk.nextToken();
char sex=stk.nextToken().charAt(0);
int count=Integer.parseInt(stk.nextToken());
OneName列表=新的OneName(姓名、性别、计数);
oneName.add(列表);
}
字符串personSex=oneName.get(0.getName();
系统输出打印LN(personSex);
}

必须将定界符设置为逗号:

StringTokenizer stk = new StringTokenizer(line,",");
比它的工作


如果未设置分隔符,则在使用
StringTokenizer
时,它将设置为
\r\n

StringTokenizer stk = new StringTokenizer("John,M,416"); 
您的文本将通过
\t\n\r\f
标记。因此
stk.nextoken()
将为您提供
John,M,416
,如果您再次调用
stk.nextoken()
,您将获得
NoTouchElementException

例如:

输出:

John,M,416
Exception in thread "main" java.util.NoSuchElementException...
因此,您需要使用
StringTokenizer
,如下所示

StringTokenizer stk = new StringTokenizer("John,M,416",",");
while (stk.hasMoreElements()){
   System.out.println(stk.nextToken());
}
现在你的孩子们出去了

John
M
416
代码中的错误在哪里

 StringTokenizer stk = new StringTokenizer(line);
 String name = stk.nextToken(); // this line is ok
 char sex = stk.nextToken().charAt(0); // ohh this one cause the issue   

您需要使用
StringTokenizer
1st是您的字符串,2nd是需要解析的regix来传递这两个参数

 ArrayList<OneName> oneName = new ArrayList<OneName>();
        while(sc.hasNextLine())
    {

    // read a line from the input file via sc into line
        line = sc.nextLine();
        String[] fields =line.split(",");


        StringTokenizer stk = new StringTokenizer(line,",");
        String name = stk.nextToken();
        char sex = stk.nextToken().charAt(0);
        int count = Integer.parseInt(stk.nextToken());


        OneName list = new OneName(name, sex, count);

        oneName.add(list);      


    }
   String personSex = oneName.get(0).getName();
    System.out.println(personSex);
    }
ArrayList oneName=new ArrayList();
while(sc.hasNextLine())
{
//通过sc将输入文件中的一行读取到第行
line=sc.nextLine();
String[]fields=line.split(“,”);
StringTokenizer stk=新的StringTokenizer(行“,”);
字符串名称=stk.nextToken();
char sex=stk.nextToken().charAt(0);
int count=Integer.parseInt(stk.nextToken());
OneName列表=新的OneName(姓名、性别、计数);
oneName.add(列表);
}
字符串personSex=oneName.get(0.getName();
系统输出打印LN(personSex);
}

希望对您有所帮助

请您在NameYear.(NameYear.java:44)的TopNames.main(TopNames.java:17)的java.util.StringTokenizer.nextToken(StringTokenizer.java:349)中提供整个错误日志?线程“main”java.util.NoSuchElementException中的异常
 ArrayList<OneName> oneName = new ArrayList<OneName>();
        while(sc.hasNextLine())
    {

    // read a line from the input file via sc into line
        line = sc.nextLine();
        String[] fields =line.split(",");


        StringTokenizer stk = new StringTokenizer(line,",");
        String name = stk.nextToken();
        char sex = stk.nextToken().charAt(0);
        int count = Integer.parseInt(stk.nextToken());


        OneName list = new OneName(name, sex, count);

        oneName.add(list);      


    }
   String personSex = oneName.get(0).getName();
    System.out.println(personSex);
    }