【问题标题】:Reading from file with lines of varying number of tokens从具有不同数量标记行的文件中读取
【发布时间】:2024-01-15 06:54:01
【问题描述】:

这是myFile.txt中的数据,第一行有4个token,第二行有3个,最后一行有4个token。最后一个标记是 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();
}

【问题讨论】:

    标签: java file input token


    【解决方案1】:

    在这种情况下,您可以添加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]);
             ...
         }
    }
    

    【讨论】:

      【解决方案2】:
      • 您可以使用String line = input.nextLine(); 读取整行,然后使用line.split(", "); 拆分标记并将它们存储在一个数组中。

      • 然后您可以遍历数组并获取值,因为array[0] 是名称,array[1] 是年龄等等......

      【讨论】: