[英]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.