簡體   English   中英

閱讀文本文件時如何閱讀前兩行

[英]How to read the previous 2 lines when reading through a text 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.");
    }
}

您想跟蹤狀態。 例如,如果您要查看最后兩行並跟蹤它們是否為int,則有4種可能的狀態:都不是int,last為int,2nd last為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行是非整數的行為。

這里的策略是:

將上一行和當前行都保存在內存中。 您可以在處理讀取文件的類上聲明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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM