Подсчет количества слов в файле - PullRequest
7 голосов
/ 04 ноября 2010

У меня проблема с подсчетом количества слов в файле. Подход, который я использую, заключается в том, что когда я вижу пробел или символ новой строки, тогда я знаю, что нужно подсчитать слово.

Проблема в том, что если у меня есть несколько строк между абзацами, то я считаю их тоже словами. Если вы посмотрите на метод readFile (), вы увидите, что я делаю.

Не могли бы вы помочь мне и направить меня в правильном направлении, как это исправить?

Пример входного файла (включая пустую строку):

word word word
word word

word word word

Ответы [ 13 ]

11 голосов
/ 04 ноября 2010

Вы можете использовать сканер с FileInputStream вместо BufferedReader с FileReader.Например: -

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);
}
10 голосов
/ 04 ноября 2010

Я бы немного изменил ваш подход.Во-первых, я бы использовал BufferedReader для чтения файла файла построчно, используя readLine().Затем разбейте каждую строку на пустом месте, используя String.split("\\s"), и используйте размер полученного массива, чтобы увидеть, сколько слов в этой строке.Чтобы узнать количество символов, вы можете посмотреть размер каждой строки или каждого разделенного слова (в зависимости от того, хотите ли вы считать пробел в качестве символов).

4 голосов
/ 04 ноября 2010

Это всего лишь мысль. Есть один очень простой способ сделать это. Если вам просто нужно количество слов, а не фактические слова, просто используйте Apache WordUtils

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());    
  }
}
3 голосов
/ 20 апреля 2012
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);
    }
}
3 голосов
/ 04 ноября 2010

Просто держите логический флажок, который позволяет узнать, был ли предыдущий символ пробелом или нет (псевдокод следует):

boolean prevWhitespace = false;
int wordCount = 0;
while (char ch = getNextChar(input)) {
  if (isWhitespace(ch)) {
    if (!prevWhitespace) {
      prevWhitespace = true;
      wordCount++;
    }
  } else {
    prevWhitespace = false;
  }
}
2 голосов
/ 08 ноября 2010

Я думаю, что правильный подход был бы с помощью Regex:

String fileContent = <text from file>;    
String[] words = Pattern.compile("\\s+").split(fileContent);
System.out.println("File has " + words.length + " words");

Надеюсь, это поможет. Значение \ s + находится в шаблон javadoc

2 голосов
/ 04 ноября 2010

Взломать решение

Вы можете прочитать текстовый файл в строковую переменную. Затем разбейте строку на массив, используя один пробел в качестве разделителя StringVar.Split ("").

Количество массивов будет равно количеству слов в файле. Конечно, это не даст вам количество номеров строк.

0 голосов
/ 09 мая 2018

Приведенный ниже код поддерживает в Java 8

// Чтение файла в строку

String fileContent=new String(Files.readAlBytes(Paths.get("MyFile.txt")),StandardCharacters.UFT_8);

// Сохранение их в спискестроки через разделитель с разделителем

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

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

sop(x);
0 голосов
/ 21 февраля 2018
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 голосов
/ 02 декабря 2017

Это можно сделать очень просто, используя Java 8:

Files.lines(Paths.get(file))
    .flatMap(str->Stream.of(str.split("[ ,.!?\r\n]")))
    .filter(s->s.length()>0).count();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...