Java 阅读文本文件时如何阅读前两行
我目前正在开发一个程序,它可以读取文本文件并根据前一行的内容打印不同的行。例如,如果前一行是整数,则我打印当前行的不同变体。如何检查前一行是否为整数,而不同时检查文件中的两行 这是到目前为止的代码Java 阅读文本文件时如何阅读前两行,java,file,Java,File,我目前正在开发一个程序,它可以读取文本文件并根据前一行的内容打印不同的行。例如,如果前一行是整数,则我打印当前行的不同变体。如何检查前一行是否为整数,而不同时检查文件中的两行 这是到目前为止的代码 public void workThroughFile(String filename) { try (BufferedReader br = new BufferedReader(new FileReader(filename))) { String line;
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,最后一行是int,最后一行是int,或者两者都是int。只需制作一些东西(例如布尔值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
}
它使用正则表达式检查字符串是正整数还是负整数。然而,它不会抓住前面有“+”符号的东西
请确保在决定如何处理当前行后更新状态,否则您将根据错误的行做出决定。请记住您希望如何处理前几行,这从第1行和第2行作为非整数的行为开始。您希望跟踪状态。例如,如果要查看最后两行并跟踪它们是否为int,则有4种可能的状态:都不是int,最后一行是int,最后一行是int,或者两者都是int。只需制作一些东西(例如布尔值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
}
它使用正则表达式检查字符串是正整数还是负整数。然而,它不会抓住前面有“+”符号的东西
请确保在决定如何处理当前行后更新状态,否则您将根据错误的行做出决定。请记住您希望如何处理前几行,这从第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);
}
}
这里的战略是: 将上一行和当前行都保存在内存中。您可以在处理文件读取的类上声明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);
}
}
如果你能粘贴到目前为止你已经完成的工作,那就太好了。如果你的程序所做的事情取决于前一行,我想你会发现最简单的管理方法就是在运行时保留前一行。你只是一次读一行,但保持一种“状态”。有很多方法可以在文件中查找,但这样做会更麻烦。顺便说一下,你的问题标题意味着你想看前两行,而不是前一行。因此,你的问题有点让人困惑。如果你能粘贴到目前为止你已经完成的工作,那就太好了。如果你的程序的功能取决于前一行,我想你会发现最简单的管理方法就是在运行时保留前一行。你只是一次读一行,但保持一种“状态”。有很多方法可以在文件中查找,但这样做会更麻烦。顺便说一下,你的问题标题意味着你想看前两行,而不是前一行。所以你的问题有点让人困惑。我明白你的意思,但我不知道如何追踪前一行。你能告诉我怎么做吗?我明白你的意思,但我不知道如何追踪前一行。你能告诉我怎么做吗?