Home > Software design >  how to count the number of words in each line in Java?
how to count the number of words in each line in Java?

Time:06-30

My task is to count the number of words on each line of a text file, separated by space. The text file has 5 lines. I am very new to Java. I have so far this code with the B1TextLoader class and several methods.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.concurrent.ConcurrentHashMap;

public class B1TextLoader {

    ConcurrentHashMap<String, String> documents = new ConcurrentHashMap<String, String>();

    public static void main(String[] args) {

        B1TextLoader loader = new B1TextLoader();
        loader.LoadTextFile("2-3-1BasicTextFile.txt");  
    }

    public void LoadTextFile(String filePath) {

        try {
            System.out.println("Loading file...");
            File f = new File(filePath);
            BufferedReader br = new BufferedReader(new FileReader(f));

            String line = br.readLine();
            Integer counter = 0;
            while (line != null)

            {
                if (line.trim().length() > 0) {
                    documents.put("doc"   counter, line);
                    ;
                    counter  ;

                }
                line = br.readLine();
                
            }
            br.close();
        } catch (Exception e) {
            System.out.println("File Load Failed");
        }
        
        System.out.println("Load Complete. Lines loaded: "   documents.size());

    }

    public void CountWordsInDocuments(ConcurrentHashMap<String, String> documents)

    {
        CountWordsInDocuments(documents);

    }
    
    public void CountWordsInDocument(String key, String value)

    {
        String[] words = value.split(" ");
        System.out.println(key   " has "   words.length   " words!");
        documents.forEach(this::CountWordsInDocument);
    }
}

My output is:

Loading file...
Load Complete. Lines loaded: 5

however, I want it to print something like

Loading file...
Load Complete. Lines loaded: 5
doc0 has 6 words!
doc1 has 8 words!
doc2 has 4 words!
doc3 has 4 words!
doc4 has 6 words!

How can I achieve this?

my text file, 2-3-1BasicTextFile.txt, looks like this:

this is a simple text file
you should find that it has five lines
each of varying lengths
and no dirty data
which might make it go wrong

CodePudding user response:

Try This

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * B1TextLoader
 */
public class B1TextLoader {

    public static void main(String[] args) {
        B1TextLoader loader = new B1TextLoader();
        loader.LoadTextFile("./text.txt");
    }

    public void LoadTextFile(String filePath) {
        System.out.println("loading file ...");
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            Object[] lines = br.lines().toArray();
            System.out.println("Load Complete. Lines loaded: "   lines.length);
            for (int i = 0; i < lines.length; i  ) {
                System.out.println("doc"   i   " has "   lines[i].toString().split(" ").length);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
  • Related