2015-02-26 1 views
0

C'est la méthode que je suis en train de faire:Java comparant les fichiers avec BufferedReader

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

L'objectif est de lire un fichier texte avec le dans le lecteur, puis vérifier si les phrases contiennent les mots-clés qui sont stockés dans un autre fichier texte avec le lecteur d'ordres, et si les phrases contiennent ces mots-clés, écrivez-les dans un autre fichier texte sans scripteur.

Je l'ai fait jusqu'à présent: Maintenant

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(); 
} 

Je n'ai aucune idée sur la façon de comparer les mots clés contenus dans order_filter.txt les phrases hamlet.txt Je vous serais reconnaissant de l'aide.

+0

Quelle est la taille des fichiers? Est-il possible de stocker le contenu en mémoire? –

+0

Les fichiers sont vraiment petits, plus un seul a 27Mb, et il est possible oui. – eXistanCe

+0

Ensuite, je suggère de charger chaque fichier dans un HashSet puis de trouver quelles clés dans le premier HashSet ne correspondent pas à une clé dans le second. –

Répondre

2

Si vous vouliez le faire à la sale, alors vous pouvez séparer les mots de ordersf et voir si chaque mot est une sous-chaîne de la phrase. Donc, en supposant que votre filtre a des mots délimités par des espaces, vous pouvez faire quelque chose comme:

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

for(String filter_word : filter_words) { 
    if(line.toLowerCase().contains(filter_word.toLowerCase())) { 
     <<do something>>; 
    } 
}