- this is a cat and that is a mice and where is the food?
- 统计每个单词出现的次数
- 存储到map中,因为map里每个key只能出现一次
- String=key;
- value为自定义类型
- “分”拣思路
- 1.为所有key创建容器
- 第二次才把对应的value存放进去
- 2.第一次创建容器,并且把value存放进去
- 第二次之后,直接使用容器,存放value
自定义类
public class Letter {
private String name;
private int count;
public Letter(String name, int count) {
super();
this.name = name;
this.count = count;
}
public Letter() {
}
get set 方法就省略了,这个里面,只用到了count来存放字符出现的次数
- 这个类里面一开始我用Integer来定义count,然后空构造器会自动把Integer赋值为null;此时我下面程序里面的count+1就会出错,因为count+1的过程,自己先得拆分,调用的是count.intValue();但是count为null此时调用方法会提示空指针错误了!!
- 而int则会默认赋值为0,如果要用Integer的话,在空构造器里头就得给他赋值为0啦。
思路一
public static void main(String[] args) {
//放到字符串里面
String string=new String("this is a cat and that is a mice and where is the food");
//以空格区分,将string分开
String[] strs=string.split(" ");
//存储到map中
Map<String, Letter> letters=new HashMap<String, Letter>();
for(String temp:strs){
//为每一个key创建一个容器,似乎把Letter当做存放的容器了
if(!letters.containsKey(temp)){
letters.put(temp, new Letter());
}
}
for(String temp:strs){
Letter col=letters.get(temp);//获取上面创建的容器,因为key是字符串,所以,每个字符串对应一个容器
col.setCount(col.getCount()+1);//如果碰见一次一样的就加一
}
//输出map的值
Set<String> keys=letters.keySet();
for(String temp:keys){
Letter col=letters.get(temp);
Integer i=col.getCount();
System.out.println("单词"+temp+"出现次数:"+i);
}
}
}
思路二
Letter col=null; //简化程序
for(String temp:strs){
//为每一个key创建一个容器,然后把value放进去
if(null==(col=letters.get(temp))){//没有就建
//Letter col=new Letter();
col=new Letter();
col.setCount(1); //放进去,即数目加1
letters.put(temp,col);
}else{
col.setCount(col.getCount()+1); //放进去,即数目加1
}