2015-02-26 2 views
0

Это метод, который я пытаюсь сделать:Java сравнения файлов с BufferedReader

static void filter(BufferedReader orders, BufferedReader in, 
     BufferedWriter out) throws IOException 

Цель состоит в том, чтобы прочитать текстовый файл с считывателем, а затем проверить, если предложения содержат ключевые слова, которые хранятся в другом текстовом файле с считывателем заказов, и если предложения содержат эти ключевые слова, запишите их в другой текстовый файл без записи.

Я делал это до сих пор:

static void filter(BufferedReader orders, BufferedReader in, 
     BufferedWriter out) throws IOException{ 

    BufferedReader ordersf = new BufferedReader(new FileReader("order_filter.txt")); 
    BufferedReader inf = new BufferedReader(new FileReader("hamlet.txt")); 
    BufferedWriter outf = new BufferedWriter(new FileWriter("out_filter.txt")); 

    String line = inf.readLine(); 

    while(line != null){ 
     String filter = ordersf.readLine(); 
     if(filter.equals(line)) 
      outf.write(" "+line); 
    } 
    ordersf.close(); 
    inf.close(); 
    outf.close(); 
} 

Теперь я не имею ни малейшего понятия о том, как сравнить ключевые слова, содержащиеся в order_filter.txt с предложениями в hamlet.txt я был бы признателен за помощь.

+0

Насколько велики файлы? Возможно ли сохранить содержимое в памяти? –

+0

Файлы действительно маленькие, более крупные, только 27Mb, и это возможно. – eXistanCe

+0

Тогда я бы предложил загрузить каждый файл в HashSet, а затем найти, какие ключи в первом HashSet не соответствуют ключу во втором. –

ответ

2

Если вы хотите сделать это грязным способом, тогда вы можете разделить слова от ordersf и посмотреть, не подставлено ли каждое слово подстрокой предложения. Поэтому, если ваш фильтр имеет слова, разделенные пробелами, вы можете сделать что-то вроде:

String[] filter_words = filter.split(" "); 

for(String filter_word : filter_words) { 
    if(line.toLowerCase().contains(filter_word.toLowerCase())) { 
     <<do something>>; 
    } 
} 
Смежные вопросы