阅读文本文件时如何阅读前两行

时间:2015-11-11 03:00:35

标签: java file

我目前正在开发一个程序,该程序读取文本文件并根据前一行所包含的内容打印不同的行。例如,如果前一行是整数,那么我打印当前行的不同变体。如何检查前一行是否为整数,而不是一次只通过文件两行?

到目前为止,这是代码。

 public void workThroughFile(String filename) {
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        String line;
        while ((line = br.readLine()) != null) {
            if (isInteger(line) == false && line.contains("?") == true) {
                System.out.println(line);
            }
            if (isInteger(line) == false && line.contains("?") == false) {
                System.out.println(line);
            }
            if (isInteger(line) == true) {

            }

        }
    }
    catch (Exception e) {
        System.out.println("Did not quite work this time.");
    }
}

2 个答案:

答案 0 :(得分:0)

你想跟踪状态。例如,如果你想查看最后两行并跟踪它们是否是整数,你有4种可能的状态:既不是整数,也不是int,第二位是int,或者两者都是整数。只需制作一些东西(例如boolean wasLastLineInt)来跟踪状态并在读取行时更新它。布尔可能是追踪国家的最简单方法。

wasLastLineInt = false;
was2ndLastLineInt = false;
while ((line = br.readLine()) != null) {
  if(wasLastLineInt){
     //do something with line if lastline was an int
  }
  else{
    //do something with line if last line wasn't an int
  }
  //whatever other conditions you want

  //prepare for next iteration
  was2ndLastLineInt = wasLastLineInt;//condition of lastline will be condition of 2ndlastline next iteration
  wasLastLineInt = line.matches("^-?\\d+$");//set last line condition for next iteration
}

它使用正则表达式http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html来检查字符串是正整数还是负整数。然而,它不会用' +'在前面签名。

确定在决定如何处理当前行后更新状态,或者您将根据错误的行做出决定。并记住你想如何处理前几行,这开始于行-1和-2的行为是非整数。

答案 1 :(得分:0)

这里的策略是:

将前一行和当前行保存在内存中。您可以在处理读取文件的类上声明2个属性。

private String prevLine;
private String currLine;

然后逐个阅读文件行:

...
String line;
while ((line = br.readLine()) != null) {
    //update line properties
    prevLine = currLine;
    currLine = line;
    if(someConditions(prevLine)){
        handleCurrLine(currLine);
    }
}
相关问题