从文件中划分扫描仪输入

时间:2012-03-24 18:10:54

标签: java input tokenize

我有一个从文件中读取输入的程序。我试图将输入分隔为仅在逗号后返回令牌。但它似乎没有用。到目前为止,这是我的代码:

package usegradebook;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class GradeBook {

private static Object[][] studentRecords = new Object[8][8];

public void compileRecord() throws FileNotFoundException
{      

   File file = new File("SomeData.txt");                   
   Scanner input = new Scanner(file);
   input.useDelimiter(",");

   for(int row = 0; row < studentRecords.length; row++)
   {
       for(int column = 0; column < studentRecords[row].length; column++)
       {
           studentRecords[row][column] = input.next();                    
       } 

   }                
   input.close();
}

以下是数据: LastName,FirstName,Exam1,Asg1,Asg2,Exam2,Asg3,Asg4 Karr,Arlen,91,86,94,100,98,93 Stotz,Ralph,81,83,93,78 Yi,Yu,99,88,101,76,90,94 Rao,Sista,91,86,94,100,98,93 克里斯托弗,托马斯,78,79,82,88,78,91 McClurg,Andrew,91,87,99,87,93 Noble,Rich,84,79,85,88,90,91 约翰逊,马克,100,100,100,100,100,100

它返回一个“线程中的异常”main“java.util.NoSuchElementException”

2 个答案:

答案 0 :(得分:0)

不是依赖于每行只有8条记录的输入(当前你只是调用input.next()而不检查是否确实存在另一个标记),你应该使用input.hasNext()来查看它是否有另一个标记。当您收到与您期望的行不匹配的行时,这将允许您更优雅地查看,并将有助于调试此行。

请参阅http://docs.oracle.com/javase/tutorial/essential/io/scanning.html

很难从你的问题中看到输入文件的确切格式,但我怀疑那里有些错误。也许在处理过程中打印出每一行,或者在抛出异常时捕获异常然后打印该行。这将缩小输入文件的哪一位,与您的预期不符。

答案 1 :(得分:0)

问题在于输入。其中一个记录缺少1个数据。因此,当涉及到最后一条记录的最后数据时,如果没有数据,您将最终调用input.next()。另外,请确保在调用扫描程序对象上hasNext()之前使用next()进行检查,这样可以防止您出现此异常。