import java.util.*;
/*
当然也可以使用特定类导入
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
*/
public class TEST1 {
/*
* 使用Scanner从控制台读取一个字符串,统计字符串中每个字符出现的次数,根据Set、List、Map集合的特性完成
*/
public static void main(String[] args) {
// 输入字符串
Scanner input = new Scanner(System.in);
String sr = input.next();
// 把字符串字符装入List集合,list集合中是順序存儲這些字符串
List<String> list = new ArrayList<String>();
for (int i = 0; i < sr.length(); i++) {
list.add(String.valueOf(sr.charAt(i)));
// System.out.println(sr.charAt(i));
}
// 上面赋值的操作也算遍历list,第二种遍历list,用foreach
for (String s : list) {
System.out.println(s);
}
// 第三种 使用迭代器Iterator
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
String s = (String) iter.next();
System.out.println(s);
}
// 把字符串字符装入Set集合,set中默認會去重
Set<String> set = new HashSet<String>();
for (int i = 0; i < sr.length(); i++) {
set.add(String.valueOf(sr.charAt(i)));
}
// 用Set中的字符与List中的字符进行比较,相同就加1进行计数,
// 然后把Set集合中的字符作为键(key),统计的数作为值(value),最后打印出Map中的数据
Map<String, Integer> map = new HashMap<String, Integer>();
for (String str : set) {
int sum = 0;
// System.out.println(str);
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(str)) {
sum++;
}
}
map.put(str, sum);
}
// map的三中遍历方式
// map第一种遍历,在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好
Set<String> ss = map.keySet(); // 或者获取value Set<Integer> values = map.getValues();
for (String str : ss) {
System.out.println(str + "出现次数为" + map.get(str) + "次");
//System.out.println(str + "出现次数为" + map.get(str) + "次");
}
//第二种使用entries,通常在想使用key和values的时候
for(Map.Entry<String, String> entry : map.entrySet()){
String mapKey = entry.getKey();
String mapValue = entry.getValue();
System.out.println(mapKey+":"+mapValue);
}
// 第三种遍历Map 使用Iterator
Iterator<Entry<String, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
Entry<String, String> entry = entries.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+":"+value);
}
input.close();
}
}