写这样的程序,我觉得c++写会导致程序太大比较耗费时间,所以我选择java。因为我java也是初学,所以我估计两天多时间才能弄好。
最终我通过找程序所需要的库借助翻书百度和与同学交流花了不少时间,然后调式程序也画了很多时间,最后是上课课余接近三天多的时间才弄好的。
经过与同学程序结果相互对比就可以知道结果是正确的了。我在这次作业体会到,必须要加速好好学习java了,那太重要了
- import java.util.Collections;
- import java.util.Comparator;
- 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[]){
- int wordCount=0; //用于统计单词的总个数
- Map<String,Integer> map=new HashMap<String,Integer>();//用于统计各个单词的个数,排序
- String sentence="hello,my name is Tom,what is your name?he said:\"my name is John\"";
- StringTokenizer token=new StringTokenizer(sentence);//这个类会将字符串分解成一个个的标记
- while(token.hasMoreTokens()){ //循环遍历
- wordCount++;
- String word=token.nextToken(", ?.!:\"\"''\n"); //用标点隔开
- if(map.containsKey(word)){ //HashMap不允许重复的key,所以利用这个特性,去统计单词的个数
- int count=map.get(word);
- map.put(word, count+1); //如果HashMap已有这个单词,则设置它的数量加1
- }
- else
- map.put(word, 1); //如果没有这个单词,则新填入,数量为1
- }
- System.out.println("总共单词数:"+wordCount);
- sort(map); //调用排序的方法,排序并输出
- }
- public static void sort(Map<String,Integer> map){
- List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
- Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {
- public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
- return (o2.getValue() - o1.getValue());
- }
- }); //排序
- for (int i = 0; i < infoIds.size(); i++) { //输出
- Entry<String, Integer> id = infoIds.get(i);
- System.out.println(id.getKey()+":"+id.getValue());
- }
- }
- }
- 结果:
github:http://www.cnblogs.com/xiexiaoshan123/