Files
prog-intro-2025/java/wspp/Wspp.java
me 2f05f238e9
All checks were successful
Markup Tests / test (push) Successful in 8s
Markdown to Html Tests / test (push) Successful in 17s
update
2026-02-17 09:32:08 +03:00

81 lines
2.7 KiB
Java

package wspp;
import java.io.*;
import java.util.*;
/**
* @author Nikita Doschennikov (me@fymio.us)
*/
public class Wspp {
public static void main(String[] args) {
if (args.length != 2) {
System.err.println(
"usage: java Wspp <inputFilePath> <outputFilePath>"
);
}
final String inputFileName = args[0];
final String outputFileName = args[1];
Map<String, WordInfo> words = new LinkedHashMap<>();
try (
BufferedReader br = new BufferedReader(
new FileReader(inputFileName)
);
FileWriter fw = new FileWriter(outputFileName)
) {
String line;
int wordPos = 1;
while ((line = br.readLine()) != null) {
line = line.toLowerCase();
StringBuilder word = new StringBuilder();
for (char c : line.toCharArray()) {
if (
Character.isLetter(c) ||
c == '\'' ||
Character.getType(c) == Character.DASH_PUNCTUATION
) {
word.append(c);
} else {
if (!word.isEmpty()) {
if (words.containsKey(word.toString())) {
words
.get(word.toString())
.occurrences.put(wordPos++);
} else {
WordInfo info = new WordInfo(word.toString());
info.occurrences.put(wordPos++);
words.put(word.toString(), info);
}
}
word = new StringBuilder();
}
}
if (!word.isEmpty()) {
if (words.containsKey(word.toString())) {
words.get(word.toString()).occurrences.put(wordPos++);
} else {
WordInfo info = new WordInfo(word.toString());
info.occurrences.put(wordPos++);
words.put(word.toString(), info);
}
}
}
for (String word : words.keySet()) {
WordInfo info = words.get(word);
int count = info.occurrences.getLength();
String occurencies = info.occurrences.toString();
fw.write(word + " " + count + " " + occurencies);
}
} catch (IOException e) {
System.out.println("Error reading file.");
}
}
}