作业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

你可能感兴趣的:(作业3)