/*
* 小练习:统计字符串中每个字母出现的次数。
* 例:"sjfksjgejdkfj" 打印结果:e(1)f(2)......
*
* 分析:
* 通过结果发现每一个字母都有对应的次数,说明字母和次数之间存在对应关系。
* 想到可以利用map数据结构
* 思路:
* 1,将字符串转换成为字符数组,因为要对每一个字母进行操作。
* 2,定义一个map集合,因为打印结果的字母有顺序,所以使用treemap集合。
* 3,遍历字符数组。
* 将每一个字母作为键去查map集合,如果返回null,将该字母和1存入到map集合当中,如果返回不是null,
* 说明该字母在map集合中已经存在并有对应次数,那么就获取该次数并进行自增,
* 然后将该字母和自增后的次数存入到map集合中。
* 4,将map集合中的数据变成指定的字符串形式返回。
* @author up淡然
*/
package map_use;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MapUse {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义字符串
String str = "sjfkjawjcltteevqez";
//调用“运算”方法,返回目的结果字符串,并保存
String result = charCount(str);
//打印结果
System.out.println(result);
}
//统计字母个数的方法
private static String charCount(String str){
//将字符串转换成为字符数组便于操作
char[] strCharArr = str.toCharArray();
//定义TreeMap对象,用于存放运算结果
TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
int count = 0; //用于记录当前该字母出现的次数
//依次遍历字符数组中的每一个字符
for(int i = 0; i < strCharArr.length; i++){
Integer value = tm.get(strCharArr[i]); //用于记录该字母已出现的次数,也可用来判断该字母是否已在map中
if(value != null) //如果该字母已经出现过,将它出现的次数用count记录,然后自增
count = value;
count++; //否则存1
tm.put(strCharArr[i], count); //记录运算结果
count = 0; //注意count清零
}
StringBuilder sb = new StringBuilder(); //注意到tm的打印结果不是我们想要的,因此定义一个StringBuilder类来转换输出形式
//获取tm中映射关系保存到setEntry集合中
Set<Map.Entry<Character, Integer>> setEntry = tm.entrySet();
//迭代访问映射关系并将访问结果记录与sb中
for(Map.Entry<Character, Integer> me : setEntry){
char ch = me.getKey();
int value = me.getValue();
sb.append(ch + "(" + value + ")");
}
return sb.toString();
}
}
* 小练习:统计字符串中每个字母出现的次数。
* 例:"sjfksjgejdkfj" 打印结果:e(1)f(2)......
*
* 分析:
* 通过结果发现每一个字母都有对应的次数,说明字母和次数之间存在对应关系。
* 想到可以利用map数据结构
* 思路:
* 1,将字符串转换成为字符数组,因为要对每一个字母进行操作。
* 2,定义一个map集合,因为打印结果的字母有顺序,所以使用treemap集合。
* 3,遍历字符数组。
* 将每一个字母作为键去查map集合,如果返回null,将该字母和1存入到map集合当中,如果返回不是null,
* 说明该字母在map集合中已经存在并有对应次数,那么就获取该次数并进行自增,
* 然后将该字母和自增后的次数存入到map集合中。
* 4,将map集合中的数据变成指定的字符串形式返回。
* @author up淡然
*/
package map_use;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MapUse {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义字符串
String str = "sjfkjawjcltteevqez";
//调用“运算”方法,返回目的结果字符串,并保存
String result = charCount(str);
//打印结果
System.out.println(result);
}
//统计字母个数的方法
private static String charCount(String str){
//将字符串转换成为字符数组便于操作
char[] strCharArr = str.toCharArray();
//定义TreeMap对象,用于存放运算结果
TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
int count = 0; //用于记录当前该字母出现的次数
//依次遍历字符数组中的每一个字符
for(int i = 0; i < strCharArr.length; i++){
Integer value = tm.get(strCharArr[i]); //用于记录该字母已出现的次数,也可用来判断该字母是否已在map中
if(value != null) //如果该字母已经出现过,将它出现的次数用count记录,然后自增
count = value;
count++; //否则存1
tm.put(strCharArr[i], count); //记录运算结果
count = 0; //注意count清零
}
StringBuilder sb = new StringBuilder(); //注意到tm的打印结果不是我们想要的,因此定义一个StringBuilder类来转换输出形式
//获取tm中映射关系保存到setEntry集合中
Set<Map.Entry<Character, Integer>> setEntry = tm.entrySet();
//迭代访问映射关系并将访问结果记录与sb中
for(Map.Entry<Character, Integer> me : setEntry){
char ch = me.getKey();
int value = me.getValue();
sb.append(ch + "(" + value + ")");
}
return sb.toString();
}
}