Overview reference
Problem
Goal
Generate a program that counts the number of words in a given text. For added complexity, read a file and count the number of words in the content.
Pseudo-code
- If the user provides a file path as the first command line argument, read the file and count the words
- Else, ask the user for input and count the words
Solution
Count the words
My definition of a word here is a group of characters separated by one or multiple spaces. As a result a full stop may be present in a “word” along with several other non-alphanumeric characters.
private static int countwords(String text ) { int count = 0; String[] splitted = text.split("\\s+"); return splitted.length; }
Reading a file
First of all, finding this solution was simple; clicked on the first stack overflow search result and bam. This method simply returns the entire content of the file in a variable. This may be questionable for extremely large files, however we will not worry about that now. Try/catch blocks were added to “catch” errors related to the file reading step. An exception will be thrown when the given file is not found or does not exist.
private static String readfile(String filepath) { String lines = ""; try{ String content = new String(Files.readAllBytes(Paths.get(filepath))); // do something with everything string lines += content; }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return lines; }
Trigger Action
public static void main(String[] args) { // TODO Auto-generated method stub if(args.length > 0) { String filepath = args[0]; String content = CountWordsinaString.readfile(filepath); int count = CountWordsinaString.countwords(content); System.out.println("The number of words is: " + count); }else { System.out.println("Type in text to count and press enter"); Scanner sc = new Scanner(System.in); String line = sc.nextLine(); int count = CountWordsinaString.countwords(line); System.out.println("The number of words is: " + count); } }
Run Program
File Path as a command line argument
C:<path>\com.learnjava\src\com\learnjava\beginner>java CountWordsinaString.java "lang list.txt" The number of words is: 1648
Text provided by user
C:<path>\com.learnjava\src\com\learnjava\beginner>java CountWordsinaString.java Type in text to count and press enter My friend is doing well thanks The number of words is: 6
Question
- How would you generate a word frequency report of the file you read ?
- How would you count the words in each file from a list of files given by the user as command line arguments.