这是myFile.txt中的数据,第一行有4个令牌,第二行有3个,最后一个有4个令牌。最后一个标记,即int,表示人员的工资。如果没有工资,则没有整数,因而少一个令牌。
Peter, 22, m, 1200
Nina, 24, f
Oscar, 40,m, 40000
显然while循环向下,会给我一个inputMisMatchException,所以有没有一个很好的方法来读取文本文件,其中每一行我有一个额外/更少的令牌?
while(input.hasNextLine()) {
String name = input.next();
int age = input.nextInt();
String gender = input.next();
int salary = input.nextInt();
}
答案 0 :(得分:3)
在这种情况下,您可以添加hasNextInt
以检查下一个标记是否为整数:
while(input.hasNextLine()) {
String name = input.next();
int age = input.nextInt();
String gender = input.next();
if (input.hasNextInt()) {
int salary = input.nextInt();
...
}
}
但是,这不是通用的:如果文件的第一列也是int
怎么办?
更好的方法是逐行读取输入,在逗号和空格上拆分,然后根据可用令牌的数量解析数据:
while(input.hasNextLine()) {
String line = input.nextLine();
String[] tokens = input.split(" ,");
String name = tokens[0];
int age = Integer.valueOf(tokens[1]);
String gender = tokens[2];
if (tokens.length > 3) {
int salary = Integer.valueOf(tokens[3]);
...
}
}
答案 1 :(得分:1)
您可以使用String line = input.nextLine();
阅读整行,然后使用line.split(", ");
拆分令牌并将其存储在数组中。
然后您可以遍历数组并获取值array[0]
是名称,array[1]
是年龄等等...