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