- /**
- * 找出指定字符串中,每个字符出现次数最多的那个字符,并打印出来.
- *
- * @param str
- * 指定的字符串
- * @return 将每个字符出现的次数都保存进TreeMap中,由用户自主选择是不是需要使用这个返回值.
- */
- public static TreeMap<String, Integer> getManyCount(String str) {
- // 定义正则需要的两个对象
- Pattern pattern = null;
- Matcher matcher = null;
- // 需要定义一个TreeMap才容易使用需求
- TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>();
- // 用来接收指定字符串中每个字符的值
- String s = null;
- // 迭代器就不多解释了
- Iterator<Entry<String, Integer>> iterator = null;
- Entry<String, Integer> next = null;
- // 用来接收出现次数最多的那个值
- int max = 0;
- // 用来接收出现次数最多的那个值的字符名
- String maxName = null;
- // 定义一个计数用的变量
- int count = 0;
- // 循环判断指定字符串中包不包含某单个字符,包含就将字符名和出现的次数一起保存进TreeMap中.
- for (int i = 0; i < str.length(); i++) {
- count = 0;
- s = str.charAt(i) + "";
- pattern = Pattern.compile(s);
- matcher = pattern.matcher(str);
- while (matcher.find()) {
- count++;
- }
- treeMap.put(s, count);
- }
- // 然后开始迭代TreeMap中已经存在的记录,从而求得出现次数最大的那个字符和它的名字.
- iterator = treeMap.entrySet().iterator();
- while (iterator.hasNext()) {
- next = iterator.next();
- // 只要每次迭代取出的次数的值大于当前出现次数最多的值max,那么就将迭代出来的值赋给
- // max,将迭代出来的名字赋给maxName,然后打印出结果,功能就宣告成功实现
- if (next.getValue() > max) {
- max = next.getValue();
- maxName = next.getKey();
- }
- System.out.println(next.getKey() + " -> " + next.getValue());
- }
- System.out.println("出现次数最多的字符是: " + maxName + ", 一共出现了: " + max + "次.");
- // 最后用户使用不使用返回的TreeMap对象,这个不硬性规定,由用户自主选择,建议最好是使用返回
- // 的值,这样更符合面向对象的思想.
- return treeMap;
- }
复制代码 |