新学者想问各位一个关于Map集合中的小例子问题

a245066003 2017-08-17 10:31:39
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,但是为什么会报错呢?
...全文
199 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
a245066003 2017-08-19
  • 打赏
  • 举报
回复
引用 2 楼 qq_27762917 的回复:
多了一个分号,去掉就可以了
谢谢
天涯若风 2017-08-18
  • 打赏
  • 举报
回复
直接使用正则挺好
Love_云宝儿 2017-08-18
  • 打赏
  • 举报
回复
引用 2 楼 qq_27762917 的回复:
多了一个分号,去掉就可以了
正解,你加了分号之后,continue就不属于if了,单独存在,所以就不对了
110成成 2017-08-18
  • 打赏
  • 举报
回复
引用 2 楼 qq_27762917 的回复:
多了一个分号,去掉就可以了
Freefish1994 2017-08-18
  • 打赏
  • 举报
回复
多了一个分号,去掉就可以了
wautsns 2017-08-17
  • 打赏
  • 举报
回复
要实现这个功能没有这么麻烦.直接替换非字母字符为空.

public static String getPureString(String str) {
	return str.replaceAll("\\W", "");
}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧