Java 从文件中分隔扫描仪输入

Java 从文件中分隔扫描仪输入,java,input,tokenize,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];

我有一个从文件中读取输入的程序。我试图将输入分隔为仅返回逗号后的标记。但它似乎不起作用。以下是我目前的代码:

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();
}
package-usegradebook;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
公共班级成绩册{
私有静态对象[][]studentRecords=新对象[8][8];
public void compileRecord()引发FileNotFoundException
{      
File File=新文件(“SomeData.txt”);
扫描仪输入=新扫描仪(文件);
input.useDelimiter(“,”);
对于(int row=0;row
以下是数据: LastName、FirstName、Exam1、Asg1、Asg2、Exam2、Asg3、Asg4 卡尔,阿伦,91,86,94,100,98,93 斯托茨,拉尔夫,81,83,93,78 易,余,99,88,101,76,90,94 拉奥,西斯塔,91,86,94,100,98,93 克里斯托弗,托马斯,78,79,82,88,78,91 麦克鲁格,安德鲁,91,87,99,87,93 高贵,富有,84,79,85,88,90,91 约翰逊,马克,100100100100100100100100100


它返回一个“Exception in thread”main“java.util.NoSuchElementException”

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


很难从您的问题中看出输入文件的确切格式,但我怀疑有问题。可能在处理时打印出每一行,或者在抛出异常时捕获并打印该行。这将缩小输入文件中与您的期望不符的部分。

问题在于输入。它是其中一条记录缺少1个数据。因此,当涉及到最后一条记录的最后一个数据时,您将在没有数据时调用
input.next()
。另外,在调用
next()之前,请确保检查
hasNext()
在scanner对象上,这将防止您出现此异常。

非常感谢。该记录实际上缺少一条记录。我用if语句中的input.hasNext()替换了代码,问题得到了解决。感谢您的建议,这确实是一个格式问题。用input.hasNext()替换input.hasNext()()在if语句中更正了此问题。