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
14 Réponses :
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; } }
Je changerais un peu votre approche. Premièrement, j'utiliserais un bufferedreader code> pour lire le fichier de fichiers en ligne à ligne à l'aide de
readline () code>. Puis divisez chaque ligne sur WhitSpace en utilisant
string.split ("\\ s") code> 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). P>
Solution de hack em> p>
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 (""). p>
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. p>
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); }
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 ++; Code> 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?
3 étapes: consommez tous les espaces blancs, vérifiez si vous êtes une ligne, consommez tous les nonwhitespace.3
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()); } }
Je pense qu'une approche correcte serait au moyen d'une regex: espère que cela aide. Le sens "\ s +" est dans modèle Javadoc < / a> p> p>
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); } }
N'oubliez pas de fermer le lecteur!
si entre les mots ayant quelques symboles, vous pouvez diviser et compter le nombre de mots. em> p>
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.
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();
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(); }
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);
si facile, nous pouvons obtenir la chaîne des fichiers par méthode: getText ();
Un nombre intimidant de duplicats: Stackoverflow.com/search?q=java+word+count
Dupliqué possible de Programme Java Word Count
Dupliqué possible de Programme Java Word Count