第三次作业
(1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。 附加要求:读入一段文本文件,统计该文本文件中单词的频率。
(2). 性能分析:
- 对C++代码运行VS的性能分析工具,找出性能问题并进行优化。
- 对Java程序运行性能分析工具 NetBeans IDE 6.0,找出性能问题并进行优化。
询问了同学以及上网查询了些资料。
package rjgc; import java.util.*; import java.util.Map.Entry; public class Ged { public static void main(String[] args) { String a="Word is case insensitive, i.e. “file”," + " “FILE” and “File” are considered the same word."; a=a.toLowerCase();//把字符串全变小写。 a=a.replaceAll("[\\pP‘'“”]", "");//去掉字符串中标点符号。 StringTokenizer b=new StringTokenizer(a);//字符串分解成可被独立使用的单词 Map<String, Integer> map= new HashMap<String, Integer>();//利用HAashMap键不允许重复来计数每个单词个数。 while (b.hasMoreTokens()) { String letter = b.nextToken(); int count; if (map.containsKey(letter)) { count=map.get(letter); //如果已有这个单词则设置它的数量加1 map.put(letter, count + 1); } else { //如果没有这个单词则新填入数量为1 map.put(letter, 1); } } sort(map); } public static void sort(Map<String, Integer> map) { List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet()); for ( int i = 0; i < infoIds.size(); i++) { Entry<String, Integer> id = infoIds.get(i); //字符大于等于4输出 if (id.getKey().length()>=4) { System.out.println(id.getKey() + ":" + id.getValue()); } } } }
测试结果
file:3
word:2
case:1
same:1
considered:1
insensitive:1