7
votes

Compter le nombre de mots dans un fichier

J'ai un problème à compter le nombre de mots dans un fichier. L'approche que je prends est quand je vois un espace ou une nouvelle ligne alors je sais compter un mot.

Le problème est que si j'ai plusieurs lignes entre paragraphes, j'ai fini par les compter comme des mots aussi. Si vous regardez la méthode ReadFile (), vous pouvez voir ce que je fais. P>

Pourriez-vous m'aider et me guider dans la bonne direction sur la manière de résoudre ce problème? p>

exemple de fichier d'entrée (y compris une ligne vide): P>

word word word
word word

word word word


4 commentaires

Un nombre intimidant de duplicats: Stackoverflow.com/search?q=java+word+count


Stackoverflow.com/questions/277143/...


Dupliqué possible de Programme Java Word Count


Dupliqué possible de Programme Java Word Count


14 Réponses :


3
votes

Gardez simplement un drapeau booléen autour qui vous permet de savoir si le personnage précédent était espacent ou non (la pseudocode suit):

boolean prevWhitespace = false;
int wordCount = 0;
while (char ch = getNextChar(input)) {
  if (isWhitespace(ch)) {
    if (!prevWhitespace) {
      prevWhitespace = true;
      wordCount++;
    }
  } else {
    prevWhitespace = false;
  }
}


0 commentaires

11
votes

Je changerais un peu votre approche. Premièrement, j'utiliserais un bufferedreader pour lire le fichier de fichiers en ligne à ligne à l'aide de readline () . Puis divisez chaque ligne sur WhitSpace en utilisant string.split ("\\ s") et utilisez la taille de la matrice résultante pour voir combien de mots sont sur cette ligne. Pour obtenir le nombre de caractères que vous pouvez regarder de la taille de chaque ligne ou de chaque mot fractionné (selon si vous souhaitez compter les caractères blouses en tant que caractères).


0 commentaires

2
votes

Solution de hack

Vous pouvez lire le fichier texte dans une chaîne var. Puis divisez la chaîne en une matrice à l'aide d'un seul espacement en tant que délimiteur Stringvar.split ("").

Le nombre de matrices équivaudrait au nombre de "mots" dans le fichier. Bien sûr, cela ne vous donnerait pas de nombre de numéros de ligne.


0 commentaires

13
votes

Vous pouvez utiliser un scanner avec un fichierInputStream au lieu de bufferedreader avec une fileReader. Par exemple: -

File file = new File("sample.txt");
try(Scanner sc = new Scanner(new FileInputStream(file))){
    int count=0;
    while(sc.hasNext()){
        sc.next();
        count++;
    }
System.out.println("Number of words: " + count);
}


2 commentaires

Le code ci-dessus donne le mauvais nombre de mots car il compte tous les styles, les ajustements, etc. ..... Modifier le code à l'intérieur tandis que la boucle avec ce mot String Word = SC.Next (); Si (Word.indexof ("\\") == - 1) Comptez ++; Cela donnera un nombre un peu plus précis ....


@Sangeetmenon Que voulez-vous dire? Je ne comprends pas ce que l'on entend par elle compte tous les styles et les ajustements. Pouvez-vous donner un exemple?



0
votes

3 étapes: consommez tous les espaces blancs, vérifiez si vous êtes une ligne, consommez tous les nonwhitespace.3 xxx


0 commentaires

4
votes

Ceci est juste une pensée. Il y a un moyen très facile de le faire. Si vous avez juste besoin de nombre de mots et non de mots réels, utilisez simplement Apache Wordils

import org.apache.commons.lang.WordUtils;

public class CountWord {

public static void main(String[] args) {    
String str = "Just keep a boolean flag around that lets you know if the previous character was whitespace or not pseudocode follows";

    String initials = WordUtils.initials(str);

    System.out.println(initials);
    //so number of words in your file will be
    System.out.println(initials.length());    
  }
}


0 commentaires

3
votes

Je pense qu'une approche correcte serait au moyen d'une regex: xxx

espère que cela aide. Le sens "\ s +" est dans modèle Javadoc < / a>


0 commentaires

3
votes
import java.io.BufferedReader;
import java.io.FileReader;

public class CountWords {

    public static void main (String args[]) throws Exception {

       System.out.println ("Counting Words");       
       FileReader fr = new FileReader ("c:\\Customer1.txt");        
       BufferedReader br = new BufferedReader (fr);     
       String line = br.readLin ();
       int count = 0;
       while (line != null) {
          String []parts = line.split(" ");
          for( String w : parts)
          {
            count++;        
          }
          line = br.readLine();
       }         
       System.out.println(count);
    }
}

1 commentaires

N'oubliez pas de fermer le lecteur!



0
votes

Nombre de mots de fichier

si entre les mots ayant quelques symboles, vous pouvez diviser et compter le nombre de mots. xxx


0 commentaires

0
votes

Regardez ma solution ici, cela devrait fonctionner. L'idée est de supprimer tous les symboles indésirables des mots, puis de séparer ces mots et de les stocker dans une autre variable, j'utilisais ArrayList. En ajustant la variable "ExclusedSyDsymbols", vous pouvez ajouter plus de symboles que vous souhaitez être exclus des mots. xxx


0 commentaires

0
votes

Ceci peut être fait de manière très pratique en utilisant Java 8:

Files.lines(Paths.get(file))
    .flatMap(str->Stream.of(str.split("[ ,.!?\r\n]")))
    .filter(s->s.length()>0).count();


0 commentaires

0
votes
BufferedReader bf= new BufferedReader(new FileReader("G://Sample.txt"));
        String line=bf.readLine();
        while(line!=null)
        {
            String[] words=line.split(" ");
            System.out.println("this line contains " +words.length+ " words");
            line=bf.readLine();
        }

0 commentaires

0
votes

le code ci-dessous prend en charge dans Java 8 em> strong>

// Lire le fichier dans String P>

List<String> words = Arrays.asList(contents.split("\\PL+"));

int count=0;
for(String x: words){
 if(x.length()>1) count++;
}

sop(x);


0 commentaires

0
votes

si facile, nous pouvons obtenir la chaîne des fichiers par méthode: getText (); xxx


0 commentaires