作业3
要求:
1. 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词的出现频率。
2.性能分析:
- 对C++代码运行VS的性能分析工具,找出性能问题并进行优化。
- 对Java程序运行性能分析工具 NetBeans IDE 6.0,找出性能问题并进行优化。
作业提示:
- 字母: A-Z, a-z.
- 字母数字: A-Z, a-z, 0-9.
- 分隔符: 非字母数字
- 单词:
- 包含有4个或4个以上的字母
- 单词由分隔符分开
- 如果一个字符串包含_非_字母数字,则不是单词
- 单词大小写不敏感,例如 “file”、“FILE”和“File”可以看作同一个单词
- 单词必须是字母开头,“file123”是单词,“123file”不是单词
作为第一次使用Java编程,其中很多东西不如C++来得熟悉,尤其是Java中有许多的类库完全不知道作业中需要用到哪些,所以很头疼。而且不熟悉使用Myeclipse编程,花了不少时间安装和学习使用。特意翻看了数据结构和Java的教材并没有解决作业中的问题,最后在借鉴了网上的代码在同学的帮助下完成了作业。
package lyl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import java.util.Map.Entry; public class wordcount { public static void main(String arg[]) { Map<String, Integer> map = new HashMap<String, Integer>();// 用于统计各个单词的个数 String sentence = "Word is case insensitive, i.e. “file”, “FILE” and “File” are considered the same word."; sentence = sentence.toLowerCase();//大小写转变 StringTokenizer token = new StringTokenizer(sentence); // 将字符串分解成一个个的标记 while (token.hasMoreTokens()) { String word = token.nextToken(", “”?.!:\"\"''\n"); // 单词用这些分隔符 分开 int count; if (map.containsKey(word)) // HashMap不允许重复的key,用这个特性,去统计单词的个数 { count = map.get(word); map.put(word, count + 1); // 单次重复则数量加1 } else map.put(word, 1); // 如果没有这个单词则新填入数量为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); if (id.getKey().length() >= 4) // 字符大于等于4输出 { System.out.println(id.getKey() + ":" + id.getValue()); } } } }
补充:StringTokenizer的实例有两种方式,这两种方式取决于returnDelims 标记位的值是true或false。 true 标记为true,那些分隔符字符本身即为标记。因此标记要么是一个分隔符字符,要么是那些连续字符(不是分隔符)的最大序列。 false 标记为false,则分隔符字符用来分隔标记。标记是连续字符(不是分隔符)的最大序列。 StringTokenizer类的对象在内部已经标识化的字符串中维持了当前位置。一些操作使得在现有位置上的字符串提前得到处理。 一个令牌的值是由获得其曾经创建StringTokenizer类对象的字串所返回的。
结果
看上去很简单的要求,其实有很多需要注意的地方,比如分隔符,比如HashMap的使用,更重要的是类库的调用,不知道需要使用什么类库很让人头疼
guihub:https://github.com/Superbiali/data/blob/master/%E4%BD%9C%E4%B8%9A3.cpp