import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.text.Collator; import java.util.Comparator; import java.util.HashSet; import java.util.Locale; import java.util.Scanner; import java.util.Set; import java.util.TreeSet; public class FindDups2 { // pour avoir l'ordre du dictionnaire canadien français.. private static final Collator qcColl = Collator.getInstance(new Locale("fr","CA")); private static Comparator qcComp = new Comparator(){ public int compare(String s1,String s2){ return qcColl.compare(s1,s2); } }; private static void montrerEnsemble(String mess,Set set){ System.out.println(mess); int i=0; for(String s:set){ System.out.printf("%-10s", s); if(++i==10){ System.out.println(); i=0; } } if(i>0)System.out.println(); } private static void montrerMots(String text,String nomDuSet,Set uniques,Setdups){ Scanner sc = new Scanner(text); sc.useDelimiter("[\\p{javaWhitespace},!\\.:\\?]+"); while(sc.hasNext()){ String token = sc.next(); if (!uniques.add(token)) dups.add(token); } uniques.removeAll(dups); // différence destructive System.out.println(nomDuSet); montrerEnsemble("* uniques *",uniques); montrerEnsemble("* doubles *",dups); System.out.println(); } public static void main(String args[]) { try { StringBuilder sb=new StringBuilder(); BufferedReader stdin = new BufferedReader( new InputStreamReader(new FileInputStream(args[0]))); String line; while((line=stdin.readLine())!=null) sb.append(line).append('\n'); String texte=""+sb; System.out.print(texte); montrerMots(texte,"HASHSET",new HashSet(),new HashSet()); montrerMots(texte,"TREESET",new TreeSet(),new TreeSet()); montrerMots(texte,"TREESET(qcComp)",new TreeSet(qcComp),new TreeSet(qcComp)); } catch (FileNotFoundException e){ System.out.println("Fichier "+args[0]+" n'a pas été trouvé"); } catch (IOException e){ System.out.println("Erreur d'entrée-sortie"); } } } /* exemple de résultat => java FindDups2 SoirDHiver.txt Soir d'hiver Émile Nelligan Ah! comme la neige a neigé! Ma vitre est un jardin de givre. Ah! comme la neige a neigé! Qu'est-ce que le spasme de vivre À la douleur que j'ai, que j'ai Tous les étangs gisent gelés, Mon âme est noire! Où-vis-je? où vais-je? Tous ses espoirs gisent gelés: Je suis la nouvelle Norvège D'où les blonds ciels s'en sont allés. Pleurez, oiseaux de février, Au sinistre frisson des choses, Pleurez oiseaux de février, Pleurez mes pleurs, pleurez mes roses, Aux branches du genévrier. Ah! comme la neige a neigé! Ma vitre est un jardin de givre. Ah! comme la neige a neigé! Qu'est-ce que le spasme de vivre A tout l'ennui que j'ai, que j'ai... HASHSET * uniques * Où-vis-je où ciels noire sinistre espoirs Aux branches pleurez Norvège âme Soir d'hiver allés Nelligan roses nouvelle du Au des A ses Émile étangs Mon À choses genévrier s'en frisson vais-je pleurs Je D'où douleur blonds l'ennui sont suis tout * doubles * spasme Qu'est-ce Pleurez de Ah jardin est givre gelés mes j'ai que neige vitre neigé les a février oiseaux un comme vivre le gisent la Ma Tous TREESET * uniques * A Au Aux D'où Je Mon Nelligan Norvège Où-vis-je Soir allés blonds branches choses ciels d'hiver des douleur du espoirs frisson genévrier l'ennui noire nouvelle où pleurez pleurs roses s'en ses sinistre sont suis tout vais-je À Émile âme étangs * doubles * Ah Ma Pleurez Qu'est-ce Tous a comme de est février gelés gisent givre j'ai jardin la le les mes neige neigé oiseaux que spasme un vitre vivre TREESET(qcComp) * uniques * A À allés âme Au Aux blonds branches choses ciels d'hiver D'où des douleur du Émile espoirs étangs frisson genévrier Je l'ennui Mon Nelligan noire Norvège nouvelle où Où-vis-je pleurez pleurs roses s'en ses sinistre Soir sont suis tout vais-je * doubles * a Ah comme de est février gelés gisent givre j'ai jardin la le les Ma mes neige neigé oiseaux Pleurez Qu'est-ce que spasme Tous un vitre vivre */