我有一个文本文件。我逐行读取这个文件并将其与列表进行比较。(我不想将整个文件保存在列表中,它有更多的数百万行)。当列表与文件中的行匹配时,我需要保留当前行的前4行和当前文件的下4行。我成功保留了接下来的4行,我可以保留前4行??? 你们能帮助我吗? 谢谢
public void compareTwoLists(List a, File f){ //read 4 before and after and compare
// List a = searchArrayList
// List b = listContainingTextArea
List<String> l = new ArrayList<String>();
String line = "";
int count = 0;
int lineNo;
boolean b = false;
BufferedReader textArea = null;
try{
textArea = new BufferedReader(new FileReader(f));
for (int i = 0; i < a.size(); i++){
System.out.println("test");
b = false;
while((line = textArea.readLine()) != null){
if (a.get(i).toString().trim().toLowerCase().equals(line.toString().trim().toLowerCase())){
b = true;
}
if (b){
count++;
if(count <= 4){
l.add(line);
System.out.println(line);
}else{
b = false;
}
}
}
}
}
catch(Exception e){
System.out.println("No such file was created");
}
finally{
try{
if (textArea != null){
textArea.close();
}
}
catch(IOException ioex){
System.out.println("An error to close the file was produced");
}
}
}
答案 0 :(得分:0)
根据您提供的少量信息,我认为您需要做的只是保留以前无法比拟的4行的缓冲区。你希望它基本上是一个永远不会超过4的FIFO(先进先出)队列。当你添加到最后,如果它大于4,你也从前面删除并丢弃。您可以使用LinkedList高效地执行此操作。匹配后,您可以从队列中获取行。
答案 1 :(得分:0)
保持一个4号的数组。 读取第1行,将其存储在0中的数组中 Readline2,将其存储在1的数组中 读取第3行,将其存储在2的数组中 读取第4行,将其存储在3中的数组中 如果到现在为止你没有获得比赛,那么你就不再需要第一线了。 因此,读取第5行,将其存储在0中的数组中。 读取第6行,将其存储在1的数组中。 这样你就可以在当前行之前保留4行。 如果你想要排序的行,那么每当你需要替换数组中的一行并且继续在索引3处添加时,你将不得不移动数组(仅当数组已经满了!!)