diff --git a/java/wordStat/WordStat.java b/java/wordStat/WordStat.java index 3ce5b13..014747c 100644 --- a/java/wordStat/WordStat.java +++ b/java/wordStat/WordStat.java @@ -1,7 +1,53 @@ -package wordStat; +import java.io.*; +import java.util.*; public class WordStat { public static void main(String[] args) { - System.out.println("hello world!"); + if (args.length != 2) { + System.err.println("incorrect input!"); + System.err.println("usage: java WordStat inputFile outputFile"); + } + + String inputFileName = args[0]; + String outputFileName = args[1]; + try { + BufferedReader r = new BufferedReader(new FileReader(inputFileName)); + + LinkedHashMap wordCount = new LinkedHashMap<>(); + StringBuilder sb = new StringBuilder(); + + int data = r.read(); + while (data != -1) { + char c = (char) data; + + if (Character.getType(c) == Character.DASH_PUNCTUATION || + Character.isLetter(c) || c == '\'') { + sb.append(c); + } else { + if (sb.length() > 0) { + String word = sb.toString().toLowerCase(); + wordCount.put(word, wordCount.getOrDefault(word, 0) + 1); + sb.setLength(0); + } + } + + data = r.read(); + } + + r.close(); + + PrintWriter writer = new PrintWriter(outputFileName, "UTF-8"); + + for (Map.Entry entry : wordCount.entrySet()) { + String key = entry.getKey(); + int value = entry.getValue(); + writer.println(key + " " + value); + } + + writer.close(); + + } catch (Exception ex) { + System.err.println("An error occured: " + ex.getMessage()); + } } }