我的程序接收一个文本文件并将每个唯一的单词(或字符组)存储为映射中的键,并存储每个单词出现的行号的链接列表。我还在 printEntry 方法中实现了一个发生计数器。
我的问题是,如果一个单词在一行上出现多次,我会尽量避免打印相同的行号两次。我在 printEntry 方法中使用了 if 语句,似乎已经接近了,但仍然没有雪茄。我不想阻止将重复的行号添加到列表中,因为它仍然需要计算以增加出现变量。
这是一个会给我带来麻烦的输入:
keyboard
mouse mouse
mouse
我需要输出如下所示:
ID: keyboard Line Numbers: 1 Occurance: 1
ID: mouse Line Numbers: 2,3 Occurance 3
我现在只提供 printEntry 方法以保持帖子简短。如果需要,我可以提供更多代码。谢谢。
public static void printEntry(Map.Entry entry){
//local occurance variable
int occurance = 1;
//print the word and the line numbers as well as test for duplicate line integers on the same key
Iterator itr = ((LinkedList) entry.getValue()).iterator();
System.out.print("ID: " + entry.getKey() + " Lines: " + itr.next());
//object variable to store previous line number
Object check = itr.next();
while(itr.hasNext()){
occurance++;
if (check != itr.next()){
System.out.print(", " + itr.next());
}
else {
System.out.println("Skipped duplicate");
}
}
//prints occurance from incremented occurance variable
System.out.print(" " + " Occurance: " + occurance);
System.out.println();
}
编辑-
我希望所有条目的信息都显示在同一行,因为我们将要扫描大型(r)文档。我已将 printEntry 方法的格式设置为接近我想要的位置,但无法弄清楚如何使用 for 循环来执行此操作。
public void printEntry(Map.Entry<String, WordStats> entry) {
String word = entry.getKey();
WordStats stats = entry.getValue();
System.out.print("ID: " + word + " Occurrences: "
+ stats.getOccurrences() + " Lines: ");
for (Integer lineNumber : stats.getLines()) {
System.out.println(lineNumber);
}
}