2016-02-04 90 views
1

我正在使用包含数据行的bufferedReader读取txt文件。然后,我试图根据多个条件过滤出文本文件的行。在这种情况下,我想跳过开头的行AA和线开始DD的文本文件看起来像使用Contains方法筛选输入的多个不同行

AA Data1 
BB Data2 
CC Data3 
DD Data4 
AA Data5 
CC Data6 

到目前为止我的代码承认,我想跳过这两个,但是,对于该行多数民众赞成从DD到AA,它会跳过DD行,但是不知道我也想跳过下面的AA行。所以,我的程序的输出如下:

BB Data2 
CC Data3 
AA Data5 
CC Data6 

它摆脱根据需要第一AA的,但留下第二AA,因为它被认为是在收到线摆脱DD的。

下面是我当前的代码:

 public static void main(String[] args){ 

    try { 
     BufferedReader br = new BufferedReader(new FileReader("files/txtfile")); 
     String line = null; 
     String previousLine = null; 

     for (line=br.readLine(); line != null;){ 
      if (previousLine != null) { 
       if (line.contains("AA")||line.contains("DD")){ 
        previousLine = br.readLine(); 
       } 
       line= br.readLine(); 
      } 
      System.out.println(previousLine); 
      previousLine = line; 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
}  

任何意见,将不胜感激!

回答

1

试试这个

import java.io.*; 
public class tehMain { 
    public static void main(String[] args) { 
     try(BufferedReader br = new BufferedReader(new FileReader("files/txtfile"))) { 
      for (String line=br.readLine(); line != null; line=br.readLine()) { 
       if (line.contains("AA")||line.contains("DD")) 
        continue; 
       System.out.println(line); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

这一个工作!谢谢。 – Tepinvic

+0

@Tepinvic不客气! –

1

这是不是你想要做什么?

for (line=br.readLine(); line != null; line=br.readLine()) { 
    if (!((line.contains("AA")||line.contains("DD"))) { 
     System.out.println(line) 
    } 
} 
+0

嗯,试图这样做没有输出,当我停止该过程时,它给出了退出代码130 – Tepinvic

2

操作方法......

while((line = br.readLine()) != null) { 
    if(!(line.contains("AA") || line.contains("DD"))) { 
    System.out.println(line); 
    } 
} 
+0

小心解释你的答案? –

+0

这一个仍然只捕获要过滤的第一行,但仍然返回第二行。在我描述的文本文件中,它过滤掉了“DD Data 4”,但在它下面返回了“AA Data5”行。 – Tepinvic

+0

while将继续读取每一行并将其设置为'line'直到它变为null。每次读取一行时,它都会检查它是否不包含AA或DD。如果它不包含,则打印该行。编辑它来解决一个始终如此的问题。 – Talon