65 lines
1.9 KiB
Java
65 lines
1.9 KiB
Java
package wspp;
|
|
|
|
import java.io.*;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.util.*;
|
|
|
|
public class Wspp {
|
|
public static void main(String[] args) {
|
|
if (args.length != 2) {
|
|
System.err.println("Usage: java Wspp inputFile outputFile");
|
|
return;
|
|
}
|
|
|
|
String inputFile = args[0];
|
|
String outputFile = args[1];
|
|
|
|
try {
|
|
WordScanner scanner = new WordScanner(inputFile);
|
|
|
|
Map<String, WordInfo> wordMap = new LinkedHashMap<>();
|
|
int wordPosition = 1;
|
|
|
|
while (scanner.hasNextWord()) {
|
|
String word = scanner.nextWord();
|
|
|
|
if (wordMap.containsKey(word)) {
|
|
WordInfo info = wordMap.get(word);
|
|
info.count++;
|
|
info.positions.add(wordPosition);
|
|
} else {
|
|
WordInfo info = new WordInfo();
|
|
info.count = 1;
|
|
info.positions = new IntList();
|
|
info.positions.add(wordPosition);
|
|
wordMap.put(word, info);
|
|
}
|
|
|
|
wordPosition++;
|
|
}
|
|
|
|
scanner.close();
|
|
|
|
PrintWriter writer = new PrintWriter(
|
|
new OutputStreamWriter(
|
|
new FileOutputStream(outputFile), StandardCharsets.UTF_8));
|
|
|
|
for (Map.Entry<String, WordInfo> entry : wordMap.entrySet()) {
|
|
String word = entry.getKey();
|
|
WordInfo info = entry.getValue();
|
|
|
|
writer.print(word + " " + info.count);
|
|
for (int i = 0; i < info.positions.size(); i++) {
|
|
writer.print(" " + info.positions.get(i));
|
|
}
|
|
writer.println();
|
|
}
|
|
|
|
writer.close();
|
|
|
|
} catch (IOException e) {
|
|
System.err.println("Error: " + e.getMessage());
|
|
}
|
|
}
|
|
}
|