From 21d9d2c105f0b99ff23bc66b176ee4a57af9e337 Mon Sep 17 00:00:00 2001 From: me Date: Mon, 2 Feb 2026 11:47:58 +0500 Subject: [PATCH] add solution for hw4:3637 --- README.md | 2 +- java/wordStat/WordStatLengthMiddle.java | 79 +++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 java/wordStat/WordStatLengthMiddle.java diff --git a/README.md b/README.md index a9ca520..ec1f103 100644 --- a/README.md +++ b/README.md @@ -368,7 +368,7 @@ include_toc: true аффиксы слов, встречающихся во входном файле, упорядоченные по возрастанию длины (при равенстве – по первому вхождению). * Класс должен иметь имя `WordStatLengthAffix` - * *3435* + * *3435* ✅ * Назовём _суффиксом слова_ подстроку, состоящую из `n / 2` последних символов слова, где `n` — длина слова. Слова длины один игнорируются. diff --git a/java/wordStat/WordStatLengthMiddle.java b/java/wordStat/WordStatLengthMiddle.java new file mode 100644 index 0000000..d852c21 --- /dev/null +++ b/java/wordStat/WordStatLengthMiddle.java @@ -0,0 +1,79 @@ +import java.io.*; +import java.util.*; + +public class WordStatLengthMiddle { + 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 (word.length() >= 7) { + word = word.substring(2, word.length() - 3); + 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 (word.length() >= 7) { + word = word.substring(2, word.length() - 3); + if (wordMap.containsKey(word)) { + wordMap.get(word).count++; + } else { + wordMap.put(word, new WordInfo(word, 1, wordIndex)); + 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()); + } + } +}