Ayuda con la clase scanner.

Iniciado por machosmecos, 18 Noviembre 2010, 04:22 AM

0 Miembros y 2 Visitantes están viendo este tema.

machosmecos

Bueno, básicamente estoy haciendo un programa a modo de diccionario en donde cuando ponga una palabra en un textField y al darle a un botón, me localice la palabra en un archivo de texto (lo de la lectura del .txt se que es con los file reader y buffers)

como el file reader y buffered reader solo leen lo que hay en el .txt sin importar que tenga, busque por el foro y encontré códigos sobre la clase scanner, que me cae de perlas, creo que es la solución a mi problema, pero solo la he visto para que imprima el resultado en consola..

mi duda es ¿como utilizo la clase scanner, de tal manera que busque en un archivo de texto lo que he puesto en un TextField, le doy a un boto y me imprima el resultado de mi búsqueda (que debe coincidir claro esta) y me lo imprima en un textArea.

ejemplo, que yo tenga en el archivo.txt  perro(definición , gato (definición) pato (definición)

cuando escriba perro en textfield, me ponga en el textArea: perro(definición)

de antemano gracias,  :laugh:

egyware

Y como lo harias sin la clase Scanner?
Por lo que se los Reader (en especial BufferedReader) pueden leer linea por linea un archivo y ahi debes parsear tu string tomado del archivo de text. Ahora si usas la clase Scanner tambien puedes hacer lo mismo ya que tiene una funcion llamada nextLine que cumple la misma función.
Ahora si quieres usar algun metodo en especial creo (por que no estoy seguro) que te puede servir findInLine  ya que busca String usando delimitadores especificados por el programador. Pero sinceramente prefiero ir leyendo linea por linea y a cada linea ir extrayendo los datos ya que es más facil de entender.

Un ejemplo del uso clase Scanner
Código (java) [Seleccionar]

Scanner in = new Scanner(System.in);
while(in.hasNextLine()){ //le hasta que no encuentre más lineas
  String linea = in.nextLine();
  linea = linea.toLowerCase(); //algun tratamiento especial :P
  System.out.println(linea); //imprimo resultado
}


Te recomiendo que el archivo del diccionario lo guardes en alguna estructura como un arbol binario de busqueda (BST), un arbol de autovalance (AVL), un arbol Redblack, arbol Tries, tablas hash, etc...
ya que buscar linealmente en el diccionario cada vez que buscan alguna palabra sera muy, pero muy lento si tienes muchas palabras ingresadas.

Siempre es revisar la documentación y saber inglés
http://download.oracle.com/javase/6/docs/api/java/util/Scanner.html


Saludos!!

machosmecos

Bueno, perdon por no contestar, me he estado liando con otras tareas y este programita...

aun no lo he logrado, he armado mi ventana, pero no se como "capturar" lo que yo ingrese en mi textFied (y de que manera establecerlo :-[)

publico mi codigo, para explicarme mejor:

package diccionariosa;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;




public class diccionariosa extends Frame implements WindowListener, ActionListener {

    TextArea t;
    TextField f;
    Button b,h;
    Choice ch;
   
   File archivo = null;
    Scanner in = new Scanner(System.in);
    ArrayList lineas = new ArrayList();
    FileReader fr = null;

    diccionariosa() throws FileNotFoundException{

        setLayout(null);
        setTitle("diccionario sinonimos / antonimos");
        setBounds(300,200,400,400);
        addWindowListener(this);

        t=new TextArea();
        t.setBounds(20,150,200,200);
        add(t);

        f=new TextField();
        f.setBounds(10,40,150,20);
        add(f);

        b=new Button("Buscar");
        b.setBounds(70,80,100,20);
        b.addActionListener(this);
        add(b);
       
        h=new Button("limpiar");
        h.setBounds(200,80,100,20);
        h.addActionListener(this);
        add(h);

        ch=new Choice();
        ch.setBounds(200,40,150,20);
        ch.addItem("Sinonimos");
        ch.addItem("Antonimos");
        add(ch);

       

   

    }


    public static void main(String[] args) throws FileNotFoundException {
        diccionariosa d = new diccionariosa();
        d.setVisible(true);




    }

    public void windowOpened(WindowEvent e) {

    }

    public void windowClosing(WindowEvent e) {
      setVisible(false);
      dispose();
      System.exit(0);
    }

    public void windowClosed(WindowEvent e) {

    }

    public void windowIconified(WindowEvent e) {

    }

    public void windowDeiconified(WindowEvent e) {

    }

    public void windowActivated(WindowEvent e) {

    }

    public void windowDeactivated(WindowEvent e) {

    }

    public void actionPerformed(ActionEvent e) {



        if( ch.getSelectedItem().equals("Sinonimos")) {
           
            try{
archivo = new File("c:\\Sinonimos.txt");
String linea;
fr = new FileReader(archivo);
BufferedReader br = new BufferedReader(fr);

lineas.clear();
String busqueda= f.getText();
in.nextLine();

busqueda = in.nextLine();

while((linea = br.readLine()) != null ){
lineas.add(linea);
}

for(int i=0;i<lineas.size();i++){
linea = (String)lineas.get(i);
if(linea.equals(busqueda)){
t.append(linea);

i = lineas.size()
}
}
}catch(IOException ex){}

        }


        else if( ch.getSelectedItem().equals("Antonimos")){
           
    }
        }



   
}



Leyer

Usa substring para separar la cadena y comprobar si es lo que buscas, si asi pues lo muestras :P


machosmecos

UFF perdón por no darme una vuelta por aquí, realmente he estado ocupado por fuerzas de causa mayor (tareas y problemas con mi conexion) pero en fin, logre terminar mi programa, gracias por la ayuda prestada y las aclaraciones, dejo parte del código, mi duda con scanner:

         
Scanner in = new Scanner(System.in);


String request = f.getText(); /// "f" es mi text field donde ingreso mis datos

try {
final BufferedReader reader = new BufferedReader(new FileReader("c:\\Diccionario.txt")); //mi archivo .txt donde tengo mi información
String line = "";
while((line = reader.readLine())!= null){
if(line.toLowerCase().indexOf(request.toLowerCase())!= -1){
t.setText("");  
t.append(""+line+"\n");/// un textarea donde imprimo mis resultados
}

break;
}reader.close();
}

catch (IOException ex) {
}