package logica; import java.util.Properties; import java.util.Enumeration; import java.util.Vector; import java.lang.NullPointerException; /** * Esta clase corresponde a cada uno de los nodos del árbol trie * que nosotros implementamos para la búsqueda del diccionario * @author Grupo Kaufmann - Heizenreder - Perales. */ public class NodoDiccionario { // diccionario en java -> Properties private Properties hijos; private boolean fin; public NodoDiccionario(){ hijos = new Properties(); fin = false; } public void agregarPalabra(String palabra){ if(palabra.length() == 0){ return; } String caracter = palabra.substring(0,1); String resto = palabra.substring(1); Object nodo = hijos.get(caracter); if(nodo != null){ // tiene esa letra en sus hijos ((NodoDiccionario)nodo).agregarPalabra(resto); } else{ // no tiene esa letra en sus hijos NodoDiccionario nuevoNodo = new NodoDiccionario(); hijos.put(caracter, nuevoNodo); if(resto.length() == 0){ nuevoNodo.fin = true; } nuevoNodo.agregarPalabra(resto); } } public Vector buscarCoincidencias(String cadena){ if(cadena.equals("")){ System.out.println("Cadena vacía"); return new Vector(0); } NodoDiccionario nodo = this; // busco el nodo que tiene la ultima letra de la cadena for(int i=0;i < cadena.length();i++){ try{ nodo = (NodoDiccionario)nodo.hijos.get(cadena.substring(i,i+1)); } catch(NullPointerException e){ System.out.println("No se encontró ningún resultado para esa palabra"); return new Vector(0); } } Vector resultado = new Vector(); if(nodo.fin){ resultado.addElement(cadena); } crearVectorCoincidencias(nodo, cadena, resultado); return resultado; } public void crearVectorCoincidencias(NodoDiccionario nodo, String base, Vector resultado){ try{ Enumeration keys = nodo.hijos.keys(); while(keys.hasMoreElements()){ String actualKey = (String)keys.nextElement(); Object objectoNodo = nodo.hijos.get(actualKey); if(((NodoDiccionario)objectoNodo).fin == true){ resultado.addElement(base.concat(actualKey)); } crearVectorCoincidencias((NodoDiccionario)objectoNodo, base.concat(actualKey), resultado); } } catch(NullPointerException e){ System.out.println("No se encontró ningún resultado para esa palabra"); } } } }