java集合TreeMap应用---求一个字符串中,每一个字母出现的次数

package cn.itcast.p1.map.test;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class TestMap {

    /**
     * 练习:
     * "fdgavcbsacdfs+++AA&&BBB" 获取该字符串中,每一个字母出现的次数。
     * 要求打印结果是:a(2)b(1)...;
     * 思路:
     * 对于结果的分析发现,字母和次数之间存在着映射的关系。而且这种关系很多。
     * 很多就需要存储,能存储映射关系的容器有数组和Map集合。
     * 关系一方式有序编号吗?没有!
     * 那就是使用Map集合。 又发现可以保证唯一性的一方具备着顺序如 a b c ...
     * 所以可以使用TreeMap集合。
     *
     * 1.因为操作的是字符串中的字母,所以先把字符串变成字符数组
     * 2.遍历字符数组,如果该字母不存在,就将该字母的键对应的值为1存储到map中
     *   如果,该字母存在,就将该字母的键对应的值+1存储到map中,键相同就会覆盖,
     *   这样就记录了每个字母在字符串中出现的次数
     * 3.遍历结束map记录所有字母出现的次数
     */

    public static void main(String[] args) {
        String str = "asbbbadccfdssf+df-dfucccier%AA+HfffHDAS";
        String s = getTreeCount(str);
        System.out.println(s);
    }

    public  static String getTreeCount(String str) {
        //把字符串变成字符数组
        char[] ch = str.toCharArray();
        //定义一个TreeMap用来存储字母和次数的映射关系
        Map<Character, Integer>map = new TreeMap<Character, Integer>();
        for (int i = 0; i < ch.length; i++) {
            if(!(ch[i] >= ‘a‘ && ch[i] <= ‘z‘ || ch[i] >= ‘A‘ && ch[i]<=‘Z‘)){
                continue;
            }
            //把字符数组中的字母作为键查map表
            Integer value =  map.get(ch[i]);
            int count = 1;
            if(value != null){
                count = value + 1;
            }
            map.put(ch[i], count);
            /*if(value == null){
                map.put(ch[i], 1);
            }else{
                map.put(ch[i], value+1);
            }*/
        }
        return mapToString(map);
    }

    private static String mapToString(Map<Character, Integer> map) {
        StringBuilder sb = new StringBuilder();
        /*Iterator<Map.Entry<Character, Integer>>it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Character, Integer> mapEntry = it.next();
            Character key = mapEntry.getKey();
            Integer value = mapEntry.getValue();
            sb.append(key+"("+value+")");
        }*/
        Iterator<Character>it = map.keySet().iterator();

        while (it.hasNext()) {
            Character key = it.next();
            System.out.println(key);
            Integer value = map.get(key);
            sb.append(key+"("+value+")");
        }
        return sb.toString();
    }

}
时间: 2024-08-04 07:46:42

java集合TreeMap应用---求一个字符串中,每一个字母出现的次数的相关文章

求一个字符串中连续出现最多的子串次数

时间:2014.09.12 地点:基地 心情:明天就要和欧阳去武汉面试阿里了,整理一下同学求助的一道题,写下这一篇,愿一切顺利. 一.题目: 求一个字符串中连续出现最多的子串次数:例如字符串abcbcbcabc,连续出现次数最多的子串是bc,出现次数为3. 二.分析 方法:后缀思路 比如题目中举例中的字符串,它的后缀有: abcbcbcabc  0 bcbcbcabc  1 cbcbcabc  2 bcbcabc  3 cbcabc  4 bcabc  5 cabc  6 abc  7 bc  

JAVA传入一个字符串,返回一个字符串中的大写字母

/** * * @param 传入一个字符串 * @return 返回一个字符串中的大写字母 */ private static String stringChange(String s) { if (Utils.isStrEmpty(s)) return ""; StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.length(); i++) { if (Character.isUpperCase(s.ch

sql 取出一个字符串中最后一个特殊字符的右边的字符

SQL如何取出一个字符串中最后一个特殊字符右边的字符,例如:10*20*300,怎样得到300? 使用reverse配合charindex来实现. reverse是把字符串倒置,然后通过charindex来获取倒置之后第一个*的位置,然后使用substring函数进行字符串截取,截取后再使用reverse倒置回来即可. 以下为例子 declare @str varchar(20) set @str = '10*20*300' select reverse(substring(reverse(@s

java编程:输入一串小写字符串,统计每个字母出现的次数

*需求:统计字符串中每个字母: * 说明:编写程序,提示用户输入一个字符串, * 然后统计字符串中每个字母出现的个数,忽略字母的大小写. * * 原理: * 1.使用String类中的toLowerCase()方法,将字符串中的大写字母转换成小写形式. * 2.构造一个具有26个int值得数组ch ,每个元素记录一个字母出现的次数. *     即,ch[0]记录a的个数,ch[1]记录b的个数. * 3.对字符中的每一个字符,判断其是否小写字母,如果是,则数组中的相应计数器加1. 第一种风格的

java学习,从一个字符串中统计同一类型出现的次数

1.从字符串“AS345asdzf*())sddsWE”中统计大写字母.小写字母.其他类型的出现的次数 String s="AS345asdzf*())sddsWE"; int l = 0,b=0,o=0; for(int i=0;i<s.length();i++){ char t= s.charAt(i);//charAt返回索引值 if(t>='a'&&t<='z'){//判断是否为小写字母 l++; }else if(t>='A'&

寻找Coder-统计一个字符串中另外一个子串的个数

题目描述 请设计一个高效算法,再给定的字符串数组中,找到包含"Coder"的字符串(不区分大小写),并将其作为一个新的数组返回.结果字符串的顺序按照"Coder"出现的次数递减排列,若两个串中"Coder"出现的次数相同,则保持他们在原数组中的位置关系. 给定一个字符串数组A和它的大小n,请返回结果数组.保证原数组大小小于等于300,其中每个串的长度小于等于200.同时保证一定存在包含coder的字符串. 测试样例: ["i am a

汇编语言——统计一个字符串中的大写字母、小写字母、数字和其他字符的个数,并显示

;统计字符串中大写字母.小写字母.数字.其他字符的个数DATAS SEGMENT buf db '12ADdf#gh592HKL*','$' tp1 db 0;大写字母个数 tp2 db 0;小写字母个数 tp3 db 0;数字的个数 tp4 db 0;其他字符的个数 str1 db 'the number of big is:','$' str2 db 'the number of small is:','$' str3 db 'the number of number is:','$' st

求一个字符串中出现最多的字符和次数

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> var str = "zhaochucichuzuiduodezifu"; var json = {}; for (var i = 0; i < str.length;

求一个字符串中的最长回文串(Java)

package huiwenchuan; import java.util.Scanner; public class Main { //判断一个字符串是否为回文串 public static boolean isHuiWen(String s) { int len=s.length(); for(int i=0;i<len/2;i++) { if(!(s.charAt(i)==s.charAt(len-i-1))) { return false; } } return true; } /**