新学者想问各位一个关于Map集合中的小例子问题
public class MapTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义字符串对象。
// String str = "asfrgarasffa";
String str = "asfr/ga/r a+sf-fa ";//如果元素出现其他字符呢?比如+ — / 等等呢?我只想打印字母呢?
//获取字符的个数。
String s = getCharCount(str);
System.out.println(s);
}
public static String getCharCount(String str) {
// TODO Auto-generated method stub
//将字符串变成字符。
char[] chr = str.toCharArray();
//定义一个Map集合容器,用来存储遍历后的键和值。
Map<Character,Integer> tm = new TreeMap<Character,Integer>();
//遍历字符数组。
for (int i = 0; i < chr.length; i++) {
//如果出现其他字符比如+ — / 等等呢?我只想打印字母呢?这时候就需要加一个判断。
if(!(chr[i]>='a' && chr[i]<='z' || chr[i]>='A' && chr[i]<='Z'));
continue;
//对字符数组中的每一个字母在Map集合中进行查找,怎么查呢?我们可以直接用get(key)方法来查,如果key不存在,则返回null,如果存在,则返回value
Integer value = tm.get(chr[i]);
//进行判断,如果key不存在,则返回null,如果存在,则返回value
if(value==null) {//判断值是否为null
tm.put(chr[i], 1);//是的话就直接存入键值
}else {//不是的话,就将值+1,覆盖原来的值,键是唯一的。
tm.put(chr[i], value+1);
}
}
return mapToString(tm);//返回这个集合。
}
private static String mapToString(Map<Character, Integer> tm) {//定义一个方法来将map集合转换成字符串打印出来。
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();//定义一个字符串容器
Iterator<Map.Entry<Character,Integer>> it = tm.entrySet().iterator();//迭代map集合
while(it.hasNext()) {
Map.Entry<Character, Integer> me = it.next();
Character key = me.getKey();
Integer value = me.getValue();
sb.append(key+"("+value+")");//对map集合中的元素添加到字符串容器里。
}
return sb.toString();//返回字符串容器的元素。 a(4)f(3)g(1)r(2)s(2)
}
}
上面的代码中,在nteger value = tm.get(chr[i]); 这句报错了,我是想只打印出字母,不出现其他字符,所以加了一个if判断if(!(chr[i]>='a' && chr[i]<='z' || chr[i]>='A' && chr[i]<='Z')); 然后如果不是这里面的字母那就返回去继续判断,如果是的话就往下执行。所以用的continue,但是为什么会报错呢?