从具有不同数量的令牌的行的文件中读取

时间:2014-03-18 14:32:26

标签: java file input token

这是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();
}

2 个答案:

答案 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]是年龄等等...