2014-09-25 58 views
-1

这个程序是假设采取一个人的名字,性别和人数有一个字符串中的名称和单独的名称,性别变成一个字符,并将人数与名称变成一个int 。具有名称的人数已经计算好了,我只需要将每个人分成正确的类别。 问题是代码编译但我得到一个NoSuchElementException错误。代码编译,但我得到NoSuchElementException错误

文件看起来是这样的:

约翰,男,416

萨拉,F,414

迈克,男,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); 
    } 
+0

将请您提供您的整个错误日志? – Simmant 2014-09-25 05:26:31

+0

线程“main”中的异常java.util.NoSuchElementException \t at java.util.StringTokenizer.nextToken(StringTokenizer.java:349) \t at NameYear。 (NameYear.java:44) \t at TopNames.main(TopNames.java:17) – ttt 2014-09-25 05:29:12

回答

0

您必须将分隔符设置为逗号:

StringTokenizer stk = new StringTokenizer(line,","); 

比它会工作。

如果您在使用StringTokenizer作为

StringTokenizer stk = new StringTokenizer("John,M,416"); 

您的文字将被\t\n\r\f标记化不设置分隔符将设置为\r\n

+0

@ttt请显示对象'OneName' – Jens 2014-09-25 05:37:22

0

。所以stk.nextToken()会给你John,M,416,如果你再次打电话stk.nextToken()你会得到NoSuchElementException

如:

StringTokenizer stk = new StringTokenizer("John,M,416"); 
System.out.println(stk.nextToken()); 
System.out.println(stk.nextToken()); 

输出地说:

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 
0

你需要通过两个参数与StringTokenizer月1日是你的字符串&二号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); 
    } 

希望它能帮助