需求:记录一个字符串中出现的字符的次数
要求的输出:a(1)b(2)f(5)..
思路:
1.定义字符串,将字符串转化为数组
2.创建Map 集合
3.遍历数组,将遍历到的字符拿到Map 中查找是否有对应的值。有对应的值就对应的值加1,再存入集合。没有就将字符添加到几何中
4.将集合转化为字符串输出
代码:
package Collection;
import java.util.*;
/*
统计一串字符串中每一个字符出现的次数
字母和出现次数有对应关系 ——————Map
*/
public class MapTest_Map {
public static void main(String[] args){
//定义字符串
String str = "hdiwdiqodiw";
String s= getCharCount(str);
System.out.println(s);
}
public static String getCharCount(String str){
//将字符串转换为数组
char[] arr = str.toCharArray();
//创建Map 集合 输出有序——HashMap
Map<Character,Integer> map = new TreeMap<Character, Integer>();
//遍历数组
for(int i=0;i<arr.length;i++){
Integer in = map.get(arr[i]);
/*if(in==null){
map.put(arr[i],1);
}
else{
map.put(arr[i],++in);
}*/
if(in==null){
//判断遍历到的字母是否在集合中存在
in=1;
}
else{
in++;
}
map.put(arr[i],in);
}
return map.toString();
}
}
运行结果:
{d=3, h=1, i=3, o=1, q=1, w=2}
要将运行结果转化为:a(1)b(2)f(5)..
完整版代码:
package Collection;
import java.util.*;
/*
统计一串字符串中每一个字符出现的次数
字母和出现次数有对应关系 ——————Map
思路:
1.定义字符串,将字符串转化为数组
2.创建Map 集合
3.遍历数组,将遍历到的字符拿到Map 中查找是否有对应的值。有对应的值就对应的值加1,再存入集合。没有就将字符添加到几何中
4.将集合转化为字符串输出
*/
public class MapTest_Map {
public static void main(String[] args){
//定义字符串
String str = "hdiwdiqodiw";
String s= getCharCount(str);
System.out.println(s);
}
public static String getCharCount(String str){
//将字符串转换为数组
char[] arr = str.toCharArray();
//创建Map 集合 输出有序——HashMap
Map<Character,Integer> map = new TreeMap<Character, Integer>();
//遍历数组
for(int i=0;i<arr.length;i++){
//判断必须是字母
if(!(arr[i]>='a'&&arr[i]<='z'||arr[i]>='A'&&arr[i]<='Z')){
//不是字母就直接结束本次循环
continue;
}
Integer in = map.get(arr[i]);
/*if(in==null){
map.put(arr[i],1);
}
else{
map.put(arr[i],++in);
}*/
if(in==null){
in=1;
}
else{
in++;
}
map.put(arr[i],in);
}
//将结果转化为:a(5)b(1)...
return mapToString(map);
}
/*
思路:
map 中无论有多少数据,什么类型最后都要变成字符串
使用容器:StringBuffer 如果是单线程,建议使用StringBuilder
*/
public static String mapToString(Map<Character,Integer> map){
//明确容器
StringBuilder sb = new StringBuilder();
//遍历集合
for(Character ch : map.keySet()){
Integer value = map.get(ch);
sb.append(ch+"("+value+")");
}
return sb.toString();
}
}
//运行结果:d(3)h(1)i(3)o(1)q(1)w(2)
Map 集合的使用情况:
1.字母和次数有对应的关系,分析问题时出现了对应关系就要考虑使用Map
2.如果对应关系中出现了有序的数字,就考虑使用数组,但是长度一定是固定的
3.如果对应关系个数不确定还是使用集合Map