Wörter suchen

celloman

Erfahrenes Mitglied
Hallo Leute

Kann mir jemand Bitte sagen wie ich in einem Text.txt nach Wörtern z.B. Auto suchen kann.

Bitte um Rückmeldung

MFG
 
Du musst die Datei erstmal einlesen.
Bist du soweit schon?
Da bekommst du einen String raus. Dann schau mal in der API nach String dort gibt es eine funktion die heisst indexOf
 
Hallo,

bei dem BufferedReader kannst du ja Zeilenweise einlesen.

Mit readLine() bekommst du dann einen String zurück.

Die Api findest du im Internet.
Such einfach mal nach Java Api.

MFG

zEriX
 
Du fragst jetzt net wirklich wo du die API findest? Wie hast du denn dann bisher was programmiert?
Also entweder du fragst mal :google: oder du schaust auf der seite von Sun
 
Schau mal hier:

Java:
package de.tutorials;

import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

/**
 * Liest den Text einer Datei ein 
 * und durchsucht ihn nach einem Wort.
 * @author tkoehler
 */
public class LeseDatei {
    
    public static Shell shell;
    public static Display display;
    public static Button btn_create;    
    
    /**
     * Die main-Methode ruft die Methoden auf
     * und verhindert das sofortige Schließen
     * des Fensters.
     * @param args werden nicht benötigt.
     */    
    public static void main(String[] args)
    {
        createWidgets();
        createListeners();
        
        shell.open();
        
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) 
                display.sleep();
        }
        display.dispose();
    }        
//-----------------------------------------------------------------------------//
    /**
     * In dieser Methode werden die Widgets erstellt.
     * shell.setLocation setzt das Fenster im Verhältnis
     * zur Auflösung in die Mitte des Displays
     */
    public static void createWidgets()
    {    
        //---- Fenster ----
        display = new Display();
        shell = new Shell(display);
        shell.setSize(600, 400);
        shell.setLayout(null);
        
        shell.setLocation((int)
                ((Toolkit.getDefaultToolkit().getScreenSize().getWidth())/2
                        - (shell.getSize().x)/2),
                (int)((Toolkit.getDefaultToolkit().getScreenSize().getHeight())/2 
                        - (shell.getSize().y)/2));
        
        //---- Buttons ----
        btn_create = new Button(shell, SWT.PUSH);
        btn_create.setBounds(20, 20, 100, 25);
        btn_create.setText("lese Text");        
    }    
//-----------------------------------------------------------------------------//    
    /**
     * Erstellt die Listener für die Widgets.
     * Listener für btn_create 
     * ruft die Methode leseDatei() auf.
     * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
     */
    public static void createListeners()
    {
        btn_create.addListener(SWT.Selection, new Listener()
        {
            public void handleEvent(Event arg0) 
            {
                leseDatei();
            }
        });
    }    
//-----------------------------------------------------------------------------//
    /**
     * Die Methode leseDatei() lädt eine Datei und zählt, 
     * wie oft ein bestimmtes Wort vorkommt.
     * Genauere Beschreibung:
     * Die Datei lorem.txt wird in den Input geladen
     * und kopiert den Text in die Variable text. Danach wird per 
     * StringTokenizer das nächste Wort mit "Lorem" verglichen. 
     * Wenn true, dann i um 1 erhöhen. Nach der Schleife ausgeben.
     * 
     */
    public static void leseDatei()
    {
        String text = "";
        try 
        {
            BufferedReader input = new BufferedReader(new FileReader("lorem.txt"));
            String line;

            while ((line = input.readLine()) != null) 
            {
                text = text + '\n' + line;
            }
            if (text.endsWith("\n"))
                text = text + "\n";

            input.close();            
        } 
        catch (FileNotFoundException ex) 
        {
            ex.printStackTrace();
        } 
        catch (IOException ex) 
        {
            ex.printStackTrace();
        }
        
        StringTokenizer st = new StringTokenizer(text);
        int i = 0;
        while(st.hasMoreTokens())
        {
            if(st.nextToken().equals("Lorem"))
            {
                i++;
                st.nextToken();
            }
        }
        System.out.println("In der Datei ist das Wort Lorem " + i + " mal enthalten");        
    }
}

hatte ich letztens schonmal hier gepostet, weiß nur nicht mehr wo^^
 
Auf die Idee mit dem Stringtokenizer wäre ich zwar nicht gekommen....aber...wie liest du nur ein...

Java:
            while ((line = input.readLine()) != null)
            {
                text = text + '\n' + line;
            }
ok...du addest zu deinem Gesamtstring ein Zeilenumbruch und die Linie. Aber warum addest du nicht linie und dann Zeilenumbruch?


Aber der Sinn dieses Blocks erschließt mir nicht
Java:
            if (text.endsWith("\n"))
                text = text + "\n";
Er liest doch schon Zeile für Zeile ein....Zwar ist es richtig, dass er die Zeilenumbrüche weglässt, aber die addest ja oben schon.
Und eine Empfehlung...arbeite mit Stringbuffer oder -builder....hier kannst du einfach ein append oder insert machen...und ist wesentlich performanter.
 
Zuletzt bearbeitet:
Ok^^ Bin noch nicht so lange bei Java, daher bin ich im Moment eher froh wenn es klappt und ich damit auch helfen kann. Hab noch viel zu lernen;)
 
Der sichere Weg ist die Stringsuche...also indexOf, wie schon von mimij85 gesagt.

@zerix....keine Ahnung...ich sehe wohl schon Gespenster^^
 
Zuletzt bearbeitet:
@Anime-Otaku
Wo benutzt er denn sein Wort als Trennzeichen?
Dem Konstruktor vom StringTokenizer übergibt man den String, den man teilen möchte und dann die Zeichen nach denen getrennt werden soll. Übergibt man nur den Text werden die "Default"-Trennzeichen benutzt.
Der StringTokenizer ist auch die performantere Methode einen String aufzuteilen.

Je nachdem was man damit machen möchte ist der StringTokenizer oder String.split() nicht sehr sinnvoll. Möchte man zum Beispiel in einem Text, die Position eines bestimmten Wortes haben um es im TextField zu markieren oder zu ersetzen, helfen diese nicht.

MFG

zEriX
 
Zurück