给定一个字符串数组,内容如下:
String[] words = {"no pains, no gains."
"well begun is half done.",
" where there is a will, there is a wa
编写程序,创建一个HashMap对象,它的键是英文单词,值是该单词的个数。
HashMap
从字符串数组words中解析出每个单词存放到wordMap中,同时统计单词数量。将HashMap修改为TreeMap,再次运行程序,结果如下:
共有13个不同的单词 {no=2, a=2, half=1, will=1, begun=1, pains=1, is=3, gains=1, done=1, way=1, there=2, well=1, where=1} {a=2, begun=1, done=1, gains=1, half=1, is=3, no=2, pains=1, there=2, way=1, well=1, where=1, will=i}
我的思路如下:
1、首先用第一个for循环遍历字符串数组wordMap,进行单词计数计算。
2、用第二个for循环遍历当前位置的字符串的按空格分解数组,如果是单词,则进行单词计数操作。单词计数操作,先判断是否存在于HashMap,如果存在,则在原来的计数上+1,如果第一次出现,则计数为1
3、打印结果
4、把上面的代码复制出来,把HashMap改为TreeMap,然后修改对应的变量名。
参考链接:
java中怎么搜索一个字符串中的所有英文单词?_百度知道
Java之hashMap遍历方式_ldcaws的博客-CSDN博客_java遍历hashmap
代码如下:
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.regex.Pattern;
public class CountWordsNums {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] words = {"no pains, no gains.",
"well begun is half done.",
" where there is a will, there is a way"};
System.out.println("使用HashMap:");
//https://zhidao.baidu.com/question/982412208210421459.html
HashMap<String,Integer> wordMap = new HashMap<>();
for(int i=0;i<words.length;i++) { //遍历字符串数组
String s = words[i]; //获取当前位置字符串
String [] strs = s.split("\\b"); //按空格分割,按空格分解字符串
//https://www.codenong.com/8248277/
Pattern p = Pattern.compile("[a-zA-Z]"); //判断字符串是否由字母组成的正则式
for(String w:strs) { //遍历当前字符串按空格分解后的每个字符串数组
boolean chars = p.matcher(w).find(); //检测当前的字符串w是字母组成的字符串
//System.out.println("w="+w+",specialChar="+chars);
if (chars==true) { //如果是字母组成的字符串,则进行计数操作
if(wordMap.containsKey(w)) { //如果这个单词在wordMap存在,则在原来的计数上+1
wordMap.put(w, wordMap.get(w)+1);
}else { //如果是第一次出现,计算为1
wordMap.put(w, 1);
}
}
}
}
//https://blog.csdn.net/leijie0322/article/details/123023309
//打印结果
for(Entry<String,Integer> entry:wordMap.entrySet()) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
System.out.println("\n使用TreeMap:");
//TreeMap的方式同上,只把数据类型和变量名修改了一下
TreeMap<String,Integer> wordTree = new TreeMap<>();
for(int i=0;i<words.length;i++) {
String s = words[i];
String [] strs = s.split("\\b");
//https://www.codenong.com/8248277/
Pattern p = Pattern.compile("[a-zA-Z]");
for(String w:strs) {
boolean chars = p.matcher(w).find();
//System.out.println("w="+w+",specialChar="+chars);
if (chars==true) {
if(wordTree.containsKey(w)) {
wordTree.put(w, wordTree.get(w)+1);
}else {
wordTree.put(w, 1);
}
}
}
}
//https://blog.csdn.net/leijie0322/article/details/123023309
for(Entry<String,Integer> entry:wordTree.entrySet()) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}