it-swarm.com.ru

Подсчет количества слов в файле

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

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

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

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

Word word Word
word Word

Word word Word
7
Tony

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

10
Brian Clements

Вы можете использовать сканер с 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);
}
11
tanyehzheng

Это всего лишь мысль. Есть один очень простой способ сделать это. Если вам просто нужно количество слов, а не фактические слова, то просто используйте 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());    
  }
}
4
javasqlsecurity dot com
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
narendra kumar botta

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

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

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

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

Надеюсь, поможет. Значение "\ s +" находится в Pattern Javadoc

2
Oso

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

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

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

2
Gthompson83

3 шага: поглотить все пробелы, проверить, является ли строка, поглотить все непробельные символы.

while(true){
    c = inFile.read();                
    // consume whitespaces
    while(isspace(c)){ inFile.read() }
    if (c == '\n'){ numberLines++; continue; }
    while (!isspace(c)){
         numberChars++;
         c = inFile.read();
    }
    numberWords++;
}
0
fabrizioM

Это может быть сделано очень с помощью Java 8:

Files.lines(Paths.get(file))
    .flatMap(str->Stream.of(str.split("[ ,.!?\r\n]")))
    .filter(s->s.length()>0).count();
0
Alex Mamo
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
Niteesh Gupta

Посмотрите на мое решение здесь, оно должно работать. Идея состоит в том, чтобы удалить все нежелательные символы из слов, затем отделить эти слова и сохранить их в некоторой другой переменной, я использовал ArrayList. Настраивая переменную "excludeSymbols", вы можете добавить больше символов, которые вы хотели бы исключить из слов. 

public static void countWords () {
    String textFileLocation ="c:\\yourFileLocation";
    String readWords ="";
    ArrayList<String> extractOnlyWordsFromTextFile = new ArrayList<>();
    // excludedSymbols can be extended to whatever you want to exclude from the file 
    String[] excludedSymbols = {" ", "," , "." , "/" , ":" , ";" , "<" , ">", "\n"};
    String readByteCharByChar = "";
    boolean testIfWord = false;


    try {
        InputStream inputStream = new FileInputStream(textFileLocation);
        byte byte1 = (byte) inputStream.read();
        while (byte1 != -1) {

            readByteCharByChar +=String.valueOf((char)byte1);
            for(int i=0;i<excludedSymbols.length;i++) {
            if(readByteCharByChar.equals(excludedSymbols[i])) {
                if(!readWords.equals("")) {
                extractOnlyWordsFromTextFile.add(readWords);
                }
                readWords ="";
                testIfWord = true;
                break;
            }
            }
            if(!testIfWord) {
                readWords+=(char)byte1;
            }
            readByteCharByChar = "";
            testIfWord = false;
            byte1 = (byte)inputStream.read();
            if(byte1 == -1 && !readWords.equals("")) {
                extractOnlyWordsFromTextFile.add(readWords);
            }
        }
        inputStream.close();
        System.out.println(extractOnlyWordsFromTextFile);
        System.out.println("The number of words in the choosen text file are: " + extractOnlyWordsFromTextFile.size());
    } catch (IOException ioException) {

        ioException.printStackTrace();
    }
}
0
F.A. Botic

Приведенный ниже код поддерживает в 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
Sandra Pavan

Файл Word-Count

Если между словами есть несколько символов, вы можете разделить и посчитать количество слов.

Scanner sc = new Scanner(new FileInputStream(new File("Input.txt")));
        int count = 0;
        while (sc.hasNext()) {

            String[] s = sc.next().split("d*[[email protected]:=#-]"); 

            for (int i = 0; i < s.length; i++) {
                if (!s[i].isEmpty()){
                    System.out.println(s[i]);
                    count++;
                }   
            }           
        }
        System.out.println("Word-Count : "+count);
0
Yash