add solution for hw4:4749
This commit is contained in:
@@ -360,7 +360,7 @@ include_toc: true
|
|||||||
середины слов, встречающихся во входном файле,
|
середины слов, встречающихся во входном файле,
|
||||||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||||||
* Класс должен иметь имя `WordStatLengthMiddle`
|
* Класс должен иметь имя `WordStatLengthMiddle`
|
||||||
* *3839*
|
* *3839* ✅
|
||||||
* Назовём _аффиксами слова_
|
* Назовём _аффиксами слова_
|
||||||
его префикс и суффикс длины `n / 2`, где `n` — длина слова.
|
его префикс и суффикс длины `n / 2`, где `n` — длина слова.
|
||||||
Слова длины один игнорируются.
|
Слова длины один игнорируются.
|
||||||
@@ -381,7 +381,7 @@ include_toc: true
|
|||||||
слова встречающиеся во входном файле,
|
слова встречающиеся во входном файле,
|
||||||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||||||
* Класс должен иметь имя `WordStatLength`
|
* Класс должен иметь имя `WordStatLength`
|
||||||
* *4142*
|
* *4142* ✅
|
||||||
* Назовём _серединой слова_ подстроку, полученную удалением
|
* Назовём _серединой слова_ подстроку, полученную удалением
|
||||||
первых и последних 3 символов слова.
|
первых и последних 3 символов слова.
|
||||||
Слова длины меньшей 7 игнорируются.
|
Слова длины меньшей 7 игнорируются.
|
||||||
|
|||||||
79
java/wordStat/WordStatLengthPrefix.java
Normal file
79
java/wordStat/WordStatLengthPrefix.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class WordStatLengthPrefix {
|
||||||
|
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<String, WordInfo> 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() != 1) {
|
||||||
|
String prefix = word.substring(0, word.length() / 2);
|
||||||
|
if (wordMap.containsKey(prefix)) {
|
||||||
|
wordMap.get(prefix).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(prefix, new WordInfo(prefix, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sb.setLength(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = r.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (word.length() != 1) {
|
||||||
|
String prefix = word.substring(0, word.length() / 2);
|
||||||
|
if (wordMap.containsKey(prefix)) {
|
||||||
|
wordMap.get(prefix).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(prefix, new WordInfo(prefix, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r.close();
|
||||||
|
|
||||||
|
List<WordInfo> 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user