题目如下(感兴趣的可以自己先尝试一下):
(字符串去任意网页复制一段话即可)
我用的字符串
上代码
//第一问:自定义一个结构,利用合适的集合类统计字符出现的次数( 结构定义合理,拆分字符,统计)。
//自定义一个结构,利用合适的集合类统计字符出现的次数 HashMapmap = new HashMap<>(); char[] chars = str.toCharArray(); for (int i = 0; i < chars.length; i++) { int x = 1; //遍历时判断,如果map容器中已经包含key的值,则调用map.put方法覆盖原有的键,value值+1 if (map.containsKey(chars[i])) { map.put(chars[i], map.get(chars[i]) + 1); } else { //否则,存入一个新的值进去,value值为x 即1 map.put(chars[i], x); } } //打印map集合验证 System.out.println(map);
结果验证: (直接打印map集合查看效果)
/ / 第二问:至少使用两种遍历方式打印每个字符出现的次数
这里顺便展示了map容器遍历的三种方式:
//方式一:keySet获取所有key的值再进行遍历 Setcharacters = map.keySet(); for (Character character : characters) { System.out.println(character + " 出现了" + map.get(character) + "次"); } //方式二:entrySet,灵活性最强,想获得什么就获得什么 Set > entries = map.entrySet(); Iterator > iterator = entries.iterator(); //利用迭代器的hasNext()方法判断是否有下一个元素 while (iterator.hasNext()) { Map.Entry next = iterator.next(); System.out.println(next.getKey() + " 出现了" + next.getValue() + "次"); } //方式三:values,只能获取值 Collection values = map.values(); Iterator iterator1 = values.iterator(); while (iterator1.hasNext()) { Integer next = iterator1.next(); System.out.println(next); }
这里就不展示每种方式遍历的结果了,过于冗长,感兴趣的小伙伴可以自己运行查看效果
/ /第三问:统计每个字母出现的次数。然后遍历打印
HashMapmapEng = new HashMap<>();//新建一个map集合用于存放字母及对应的次数 String[] split = str.split(""); for (int i = 0; i < split.length; i++) { String regEng = "^[a-zA-Z]$";//此处正则验证是否匹配字母 ^表示开始 $表示结束 if (split[i].matches(regEng)) {//字符串的matches方法用于匹配正则表达式 //以下代码同上文,就不做详细注释啦 int x = 1; if (mapEng.containsKey(chars[i])) { mapEng.put(chars[i], mapEng.get(chars[i]) + 1); } else { mapEng.put(chars[i], x); } } } //利用entry映射调用迭代器来获取key和value Iterator > iterator2 = mapEng.entrySet().iterator(); while (iterator2.hasNext()) { Map.Entry next = iterator2.next(); System.out.println("单词 " + next.getKey() + " 出现了" + next.getValue() + "次"); }
结果验证:
/ /第四问:打印出现次数超过3次的单词(大小写不敏感)
String regWord = "[^a-zA-Z]+";//反向字符集。匹配未包含的任何字符。例如"[^abc]"匹配"plain"中"p","l","i","n"。 String[] split = str.split(regWord);//以该正则切割字符串,匹配到的所有即为英文单词 HashMapwordMap = new HashMap<>();//新建hashMap集合,用于存放单词及对应次数 for (int i = 0; i < split.length; i++) { split[i] = split[i].toLowerCase();//大小写不敏感处理 //如果map集合中已经包含字符串数组中的值,则覆盖之前的值,获取之前的value加一并重新存入对应的key值 if (wordMap.containsKey(split[i])) { wordMap.put(split[i], wordMap.get(split[i]) + 1); } else { //否则则说明该单词第一次出现,存入map集合中,value为次数即1 wordMap.put(split[i], 1); } } //利用entry映射调用迭代器来获取key和value Iterator > iterator = wordMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry next = iterator.next(); //如果value的值大于3,则说明该单词出现了3次以上,输出到控制台 if (next.getValue() > 3) { //输出到控制台 System.out.println("单词 " + next.getKey() + " 出现了" + next.getValue() + "次"); } }
展示结果:
以上即为该题的详解及过程,如有问题欢迎留言互动~
Respect
Thanks
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)