Comment rechercher un mot dans un fichier en utilisant java


J'écris un programme java pour rechercher un mot dans un fichier texte contenant une liste de mots dans le dictionnaire. Comme vous pouvez maintenant, ce fichier contient environ 300 000 mots. J'ai pu trouver un programme qui peut parcourir les mots en comparant chaque mot avec le mot d'entrée (le mot que je recherche). Le problème est que ce processus prend beaucoup de temps pour trouver un mot, surtout si le mot commence par les derniers alphabets comme x, y ou z. Je veux quelque chose de plus efficace qui peut trouver un mot presque instantanément. Voici mon code:

import java.io.IOException;
import java.io.InputStreamReader;

public class ReadFile
{
public static void main(String[] args) throws IOException
{
    ReadFile rf = new ReadFile();
    rf.searchWord(args[0]);
}

private void searchWord(String token) throws IOException
{
    InputStreamReader reader = new InputStreamReader(
            getClass().getResourceAsStream("sowpods.txt"));
    String line = null;
    // Read a single line from the file. null represents the EOF.
    while((line = readLine(reader)) != null && !line.equals(token))
    {
        System.out.println(line);
    }

    if(line != null && line.equals(token))
    {
        System.out.println(token + " WAS FOUND.");
    }
    else if(line != null && !line.equals(token))
    {
        System.out.println(token + " WAS NOT FOUND.");
    }
    else
    {
        System.out.println(token + " WAS NOT FOUND.");
    }
    reader.close();
}

private String readLine(InputStreamReader reader) throws IOException
{
    // Test whether the end of file has been reached. If so, return null.
    int readChar = reader.read();
    if(readChar == -1)
    {
        return null;
    }
    StringBuffer string = new StringBuffer("");
    // Read until end of file or new line
    while(readChar != -1 && readChar != '\n')
    {
        // Append the read character to the string. Some operating systems
        // such as Microsoft Windows prepend newline character ('\n') with
        // carriage return ('\r'). This is part of the newline character
        // and therefore an exception that should not be appended to the
        // string.
        if(readChar != '\r')
        {
            string.append((char) readChar);
        }
        // Read the next character
        readChar = reader.read();
    }
    return string.toString();
}

}

Veuillez également noter que je voudrais utiliser ce programme dans un environnement Java ME. Toute aide serait très appréciée merci-Jevison7x.

Author: Jevison7x, 2013-01-27

1 answers

, Vous pouvez utiliser fgrep (fgrep est activé par -F pour grep) (Linux page de man de fgrep):

grep -F -f dictionary.txt inputfile.txt

Le fichier du dictionnaire doit contenir les mots un sur chaque ligne.

Je ne sais pas s'il est toujours exact, mais L'article Wikipedia sur grepmentionne l'utilisation de algorithme Aho-Corasick dans fgrep, qui est un algorithme qui construit un automate basé sur un dictionnaire fixe pour une correspondance rapide des chaînes.

Quoi qu'il en soit, vous pouvez jeter un oeil à la liste des algorithmes de recherche de chaînes sur un ensemble fini de motifs sur Wikipedia. Ce sont les plus efficaces avec lesquels travailler lors de la recherche de mots dans le dictionnaire.

 1
Author: nhahtdh, 2013-01-27 08:54:36