ArbrePrefixes(Iterable s) throws FileNotFoundException{
racine=new Noeud('.',null,false);//racine = 根
Iterator iter = s.iterator();
while(iter.hasNext()){
Scanner buffer = new Scanner(iter.next());//new file
buffer.useDelimiter("");
Character symboleLu;
Noeud pere = this.racine;
boolean prefixe=false;
while (buffer.hasNext()) {
symboleLu = buffer.next().charAt(0);
if(!buffer.hasNext()){prefixe=true;}
CreerFilsManquant(pere,symboleLu,prefixe);
pere=pere.listeFils.get(symboleLu);}//pere=父节点
buffer.close();
}}
//找后缀
public void trouverSuffixe(){
if(this==racine){
noeudCandidat=racine;
}
else{
noeudCandidat = this.pere.suffixe;
}
while(true){
if (noeudCandidat.listeFils.get(this.caractere)!=null && noeudCandidat.listeFils.get(this.caractere)!=this){
suffixe=noeudCandidat.listeFils.get(this.caractere);
}
if(suffixe!=null){break;}
else{
if(noeudCandidat.pere == null){
suffixe=racine;
}
else{
noeudCandidat=noeudCandidat.pere;
}
}
}
}
//找符合的后缀
public void trouverSuffixeAcceptant(){
if(suffixe.prefixeMotDico){
suffixeAcceptant=suffixe;
}
else{
suffixeAcceptant=suffixe.suffixeAcceptant;
}
if(suffixeAcceptant==null){
suffixeAcceptant=racine;
}}
public void VerifierOccurence(){
try {
URL url = AhoCorasick.class.getClassLoader().getResource("");
Iterator it = ConstruitDictionnaire(url.getFile()+"CyranoDeBergerac.txt").iterator();
Noeud noeudEnCours=racine;
Noeud noeudSuffixe;
int compteur = 0;
while(it.hasNext()){
String mot = it.next();
Scanner buffer = new Scanner(mot);//new file
buffer.useDelimiter("");
Character symboleLu;
//char[] ch = mot.toCharArray();
while (buffer.hasNext()) {
compteur ++;
symboleLu =buffer.next().charAt(0);
Character tiret=new Character('-');
if((Character.isLetter(symboleLu))||(symboleLu.equals(tiret)))
{
if(noeudEnCours!=null && noeudEnCours.listeFils.get(symboleLu)!=null){
noeudEnCours=noeudEnCours.listeFils.get(symboleLu);
if (noeudEnCours.prefixeMotDico){
Occurence occ = new Occurence(mot,compteur);
System.out.println("--nouedSuffixe=racine-------"+compteur);
}
noeudSuffixe=noeudEnCours.suffixeAcceptant;
while(noeudSuffixe !=racine){
Occurence occ = new Occurence(mot, compteur);
System.out.println("---noeudSuffixe------"+compteur);
noeudEnCours=noeudSuffixe;
noeudSuffixe=noeudSuffixe.suffixeAcceptant;
}
}
else{
noeudEnCours=racine.listeFils.get(symboleLu);
if(noeudEnCours != null) noeudEnCours.Afficher();
}}}
buffer.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
主要是VerifierOccurence这个函数来运行main。