【发布时间】:2015-05-05 12:42:29
【问题描述】:
我必须编写一个程序来处理链表中的单词频率并输出如下结果: 单词,出现次数,频率百分比
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class Link {
public static void main(String args[]) {
long start = System.currentTimeMillis();
LinkedList<String> list = new LinkedList<String>();
File file = new File("words.txt");
try {
Scanner sc = new Scanner(file);
String words;
while (sc.hasNext()) {
words = sc.next();
words = words.replaceAll("[^a-zA-Z0-9]", "");
words = words.toLowerCase();
words = words.trim();
list.add(words);
}
sc.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Map<String, Integer> frequency = new TreeMap<String, Integer>();
for (String count : list) {
if (frequency.containsKey(count)) {
frequency.put(count, frequency.get(count) + 1);
} else {
frequency.put(count, 1);
}
}
System.out.println(frequency);
long end = System.currentTimeMillis();
System.out.println("\n" + "Duration: " + (end - start) + " ms");
}
}
输出:{a=1, ab=3, abbc=1, asd=2, xyz=1}
我不知道如何以百分比计算频率并忽略少于 2 个字符的单词。例如“a=1”应该被忽略。
提前致谢。
【问题讨论】:
-
注意:尽管您是从 Java 开始的 - 尝试不将所有代码都填充到 main.xml 中。一个函数/方法应该做一个的事情,而不是两个、三个或 10 个。回答你的问题:你真的需要 Stackoverflow 来向你介绍 if/then/else 的概念吗?例如:if (word has less than 2 characters),那么不加到词表中?!
-
是否应该在频率中忽略少于2个字符的单词?我的意思是:“aa”应该输出 {aa=0.5} 或 {a=1.0} ?
-
少于 2 个字符的单词不会算作一个单词,或者你会算他们但不会输入输出。?
标签: java