这是myFile.txt中的数据,第一行有4个标记,第二行有3个,最后一行有4个标记。最后一个令牌是int,表示人员的工资。如果没有薪水,则没有整数,因此少一个token。
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();
}
在这种情况下,您可以添加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]);
...
}
}
-
您可以使用
String line = input.nextLine();
读取整行,然后使用line.split(", ");
拆分令牌并将它们存储在数组中。 -
然后你可以遍历数组,得到
array[0]
是名字,array[1]
是年龄,等等…