From ab51c1a3dc91ede59b1f6197eeb6aadc3cfac7aa Mon Sep 17 00:00:00 2001 From: me Date: Sat, 31 Jan 2026 15:06:18 +0500 Subject: [PATCH] add solution for hw4:3233 --- java/wordStat/WordInfo.java | 11 +++++ java/wordStat/WordStatLength.java | 71 +++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 java/wordStat/WordInfo.java create mode 100644 java/wordStat/WordStatLength.java diff --git a/java/wordStat/WordInfo.java b/java/wordStat/WordInfo.java new file mode 100644 index 0000000..993cc9f --- /dev/null +++ b/java/wordStat/WordInfo.java @@ -0,0 +1,11 @@ +public class WordInfo { + String word; + int count; + int firstIndex; + + WordInfo(String word, int count, int firstIndex) { + this.word = word; + this.count = count; + this.firstIndex = firstIndex; + } +} diff --git a/java/wordStat/WordStatLength.java b/java/wordStat/WordStatLength.java new file mode 100644 index 0000000..f4408b2 --- /dev/null +++ b/java/wordStat/WordStatLength.java @@ -0,0 +1,71 @@ +import java.io.*; +import java.util.*; + +public class WordStatLength { + public static void main(String[] args) { + 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)); + + Map wordMap = new HashMap<>(); + StringBuilder sb = new StringBuilder(); + int wordIndex = 0; + + 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(); + if (wordMap.containsKey(word)) { + wordMap.get(word).count++; + } else { + wordMap.put(word, new WordInfo(word, 1, wordIndex)); + wordIndex++; + } + sb.setLength(0); + } + } + + data = r.read(); + } + + if (sb.length() > 0) { + String word = sb.toString().toLowerCase(); + if (wordMap.containsKey(word)) { + wordMap.get(word).count++; + } else { + wordMap.put(word, new WordInfo(word, 1, wordIndex)); + } + } + + r.close(); + + List sortedWords = new ArrayList<>(wordMap.values()); + sortedWords.sort(Comparator.comparingInt((WordInfo w) -> w.word.length()) + .thenComparingInt(w -> w.firstIndex)); + + + PrintWriter writer = new PrintWriter(outputFileName, "UTF-8"); + + for (WordInfo info : sortedWords) { + writer.println(info.word + " " + info.count); + } + + writer.close(); + + } catch (Exception ex) { + System.err.println("An error occured: " + ex.getMessage()); + } + } +}