1

我有一个文本文件,最多可以存储 3 行(每行都有时间##:##)。

如果整个文本文件为空:执行任务 1

否则,如果第一行有时间:执行任务 2

否则,如果第一行和第二行都填满了时间:执行任务 3

否则,如果所有三行都有时间:执行任务 4

否则,如果所有三行都有时间,但第一行时间和第三行时间间隔超过 2 小时:执行任务 5

我已经弄清楚了前两个。

if ((inputFile.readLine()) == null) {Keypad5 task1 = new Keypad5(); }

else if ((inputFile.readLine()) !=null) {Keypad6 task2 = new Keypad6();}

我如何阅读第二行和第三行?如果第二行的时间是 12:54,第三行的时间是 3:55,这就是超过 2 小时的间隔。我大概可以减去时间。

4

3 回答 3

3

我建议你在决定做什么之前阅读所有三行。这将减少第二行和第三行的“复制和粘贴”阅读。

像这样的东西可能是你所追求的:

List<String> lines = new ArrayList<String>();

Scanner s = new Scanner(new File("filename.txt"));
while (s.hasNextLine())
    lines.add(s.nextLine());

switch (lines.size()) {
case 0: doTask1(); break;
case 1: doTask2(); break;
case 2: doTask3(); break;
case 3:
    if (gapBetween(lines.get(0), lines.get(2)) < 2)
        doTask4();
    else
        doTask5();
}
于 2011-03-04T18:42:33.090 回答
0

随后对 BufferedReader 的 readLine() 调用总是读取文件的下一行。如果要比较不同的行,则必须将它们存储在变量中,然后再进行比较。

于 2011-03-04T18:44:55.640 回答
0

我会通过首先将所有文本行读入一个集合来做到这一点,如果你相当确定这只会是 3 行,它不会导致内存问题,你不需要做太多的错误处理.

ArrayList<String> lines = new ArrayList<String>();
String line = null;
while ((line = inputFile.readLine()) != null){
lines.add(line);
}

然后你可以很容易地做一些 if 语句,而不会覆盖缓冲区中的前几行。(我假设“inputFile”是一个 BufferedReader)

于 2011-03-04T18:46:51.160 回答