我目前正在开发一个程序,该程序读取文本文件并根据前一行所包含的内容打印不同的行。例如,如果前一行是整数,那么我打印当前行的不同变体。如何检查前一行是否为整数,而不是一次只通过文件两行?
到目前为止,这是代码。
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.");
}
}
答案 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);
}
}