2016-02-04 6 views
1

Я читаю txt-файл с использованием буферизатора, который содержит строки данных. Затем я пытаюсь отфильтровать строки текстового файла на основе нескольких условий. В этом случае, я хочу, чтобы пропустить строки, начинающиеся с AA и строки, начинающиеся с DD Текстовый файл выглядит что-то вродеИспользование метода Содержит для фильтрации нескольких разных строк ввода

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

Мой код до сих пор признает, что я хочу, чтобы пропустить обе из них, однако, для ряда Thats идет от DD до AA, он пропустит строку DD, но затем не признает, что я хочу также пропустить строку AA ниже. Таким образом, выход из моей программы гласит:

BB Data2 
CC Data3 
AA Data5 
CC Data6 

Он избавляется от первого АА по желанию, но оставляет второй АА, потому что она избавилась от 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

Пока будет продолжаться чтение каждой строки и установка ее в строку, пока она не достигнет нуля. Каждый раз, когда он читает строку, он проверяет, не содержит ли он АА или ДД. Если он тоже не содержит, напечатайте строку. Отредактировал его, чтобы исправить проблему, когда она всегда была правдой. – Talon

Смежные вопросы