逐字符串比较文件

时间:2013-11-27 23:44:49

标签: java string file methods

我有两个文件:

Grader.getFileInfo("data\\studentSubmissionA.txt");
Grader.teacherFiles("data\\TeacherListA.txt");

两者都包含数学问题列表,但是尚未解析TeacherList以检查StudentSubmission是否未从原始版本更改。

studentSubmission被发送到Grader类,方法当前如下所示:

public static void getFileInfo(String fileName)
        throws FileNotFoundException {

    Scanner in = new Scanner(new File(fileName))

    while (in.hasNext()) { 
    String fileContent = in.nextLine();
     }

并且TeacherFiles方法看起来像

    public static void teacherFiles(String teacherFiles) 
        throws FileNotFoundException{

    Scanner in = new Scanner(new File(teacherFiles));

    while (in.hasNext()){
        String teacherContent = in.nextLine();

        String line = teacherContent.substring(0, teacherContent.indexOf('='));
    }

我不知道如何将这些方法转换为另一种方法以便比较它们,因为它们来自一个文件,我必须在方法签名中放一些东西来传递它们并且它不起作用。

我尝试将它们放在一种方法中,但这也是一种破坏。

我不知道从哪里开始。

不幸的是,我无法使用try / catches或数组。

是否可以通过方法发送.substring(0,.indexof('='))?

line = teacherFiles(teacherContent.substring(0 , .indexof('=')));是否可以这样做?

1 个答案:

答案 0 :(得分:0)

用更一般的术语思考。请注意,除了一些细微差别之外,分别称为getFileInfoteacherFiles的方法是相同的。那么为什么我们不考虑找到合并这两种功能并处理它们之外的细微差别的最佳方式呢?

合乎逻辑的是,您无法使用数组,因为在初始化数组之前需要知道数组的元素数,并且在读取文件时数组已经初始化。因此,使用数组执行此任务可能是一种过度杀伤(例如,您在内存中分配1000个元素而您只使用10个元素)或者不足(如果您创建了10个元素的数组,但您需要1000个)。因此,由于您事先不知道行数,因此需要为您的任务使用其他数据结构。

所以创建以下方法:

public static AbstractList<String> readFile(String filePath) throws FileNotFoundException, IOException {
    Scanner s = new Scanner(new File(filePath));
    AbstractList<String> list = new ArrayList<String>();
    while (s.hasNext()){
        list.add(s.next());
    }
    s.close();
    return list;

}

然后使用该方法读取学生档案并阅读教师档案。将结果存储到两个单独的AbstractList<String>变量中,然后迭代它们并根据需要进行比较。再次,用更一般的术语思考。