在控制台输入一句英语, 获得每个字母出现的次数,注:每个字符作为key,出现的次数作为value

public class TestDemo1 {
    public static void main(String[] args) {
        HashMap<Character,Integer> hashMap = new HashMap();
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一英语:");
        String s = scanner.nextLine();
        String regex = "[a-zA-Z ,.]*";
        boolean b = s.matches(regex);
        if (!b){
            System.out.println("你的输入有误");
            return;
        }
        //除去空格逗号句号
        String s1 = s.replaceAll("[ ,.]", "");
        //遍历字符串
        for (int i = 0; i < s1.length(); i++) {
            int value = 1;
            //得到集合的Key
            Set keySet = hashMap.keySet();
            char c = s1.charAt(i);
            //判断集合是否为空
            if(keySet==null){
                hashMap.put(c,value);
                continue;
                //如果Keyset中已经存在当前字母则将它的Value取出来加一再放进去
            }else if(keySet.contains(c)){
                int i1 = hashMap.get(c);
                i1++;
                hashMap.put(c, i1);
                continue;
            }else {
                hashMap.put(c,value);
            }
        }
        System.out.println(hashMap.toString());

    }
}

小编是还没入门的菜鸟求大神更优化的代码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用HashMap来实现这个功能,具体步骤如下: 1. 从控制台输入字符串。 2. 定义一个HashMap用于存储不同字符和对应的出现次数。 3. 遍历输入字符串,将每个字符作为key放入HashMap中,如果已经存在,则将对应的value+1。 4. 遍历HashMap,输出每个字符和对应的出现次数。 示例代码如下: ```java import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class CountChars { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入字符串:"); String str = scanner.nextLine(); Map<Character, Integer> map = new HashMap<>(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (map.containsKey(c)) { map.put(c, map.get(c) + 1); } else { map.put(c, 1); } } System.out.println("不同字符个数:" + map.size()); for (Map.Entry<Character, Integer> entry : map.entrySet()) { char c = entry.getKey(); int count = entry.getValue(); double frequency = (double) count / str.length(); System.out.println("字符'" + c + "'出现了" + count + "次,频率为" + frequency); } } } ``` 输入示例: ``` 请输入字符串: hello world! ``` 输出示例: ``` 不同字符个数:10 字符' '出现了1次,频率为0.09090909090909091 字符'!'出现了1次,频率为0.09090909090909091 字符'd'出现了1次,频率为0.09090909090909091 字符'e'出现了1次,频率为0.09090909090909091 字符'h'出现了1次,频率为0.09090909090909091 字符'l'出现了3次,频率为0.2727272727272727 字符'o'出现了2次,频率为0.18181818181818182 字符'r'出现了1次,频率为0.09090909090909091 字符'w'出现了1次,频率为0.09090909090909091 字符'!'出现了1次,频率为0.09090909090909091 ``` ### 回答2: 在Java中输入任意字符串,统计不同字符的个数和每个字符出现频率,可以通过使用HashMap来实现。 首先,我们可以创建一个HashMap对象来存储字符和对应出现次数的键值对。然后,遍历输入字符串,对于每一个字符,我们可以使用charAt()方法来获得当前字符。接着,我们可以利用HashMap的特性,检查字符是否已经作为键存在于HashMap中。如果存在,我们可以通过get()方法获取当前键对应的值,并将其加1。否则,我们可以添加新的键值对,字符作为键,值设置为1。 在遍历完成之后,我们可以使用HashMap的size()方法来获取不同字符的个数。而每个字符出现频率就是它在HashMap中存储的值。 以下是代码示例: ```java import java.util.HashMap; import java.util.Map; public class CharacterCounter { public static void main(String[] args) { String str = "Hello, World!"; Map<Character, Integer> characterMap = new HashMap<>(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (characterMap.containsKey(c)) { int count = characterMap.get(c); characterMap.put(c, count + 1); } else { characterMap.put(c, 1); } } int differentCharacters = characterMap.size(); System.out.println("不同字符的个数:" + differentCharacters); System.out.println("每个字符出现的频率:"); for (Map.Entry<Character, Integer> entry : characterMap.entrySet()) { char key = entry.getKey(); int value = entry.getValue(); System.out.println(key + ": " + value); } } } ``` 执行以上代码,将会输出: 不同字符的个数:11 每个字符出现的频率: !: 1 ,: 1 : 1 W: 1 d: 1 e: 1 l: 3 o: 2 H: 1 r: 1 l: 2 以上代码统计输入字符串中的不同字符的个数以及每个字符出现频率。 ### 回答3: 在Java中,要实现统计任意字符串中不同字符的个数以及每个字符出现频率,可以使用一个HashMap来存储每个字符和对应的出现次数。 首先,我们需要接收用户输入字符串。可以使用Scanner类从控制台获取用户输入字符串。 然后,我们可以创建一个HashMap对象,用于存储字符出现次数的键值对。 接下来,我们可以使用for循环遍历输入字符串,并通过charAt()方法获取每个字符,然后判断该字符是否已经在HashMap中存在。 如果字符已经在HashMap中存在,那么我们可以通过get()方法获取该字符原来的出现次数,并将其加1后再次放入HashMap中。 如果字符尚未在HashMap中存在,那么我们可以将该字符作为键,出现次数初始值为1作为值放入HashMap中。 最后,我们可以使用foreach循环遍历HashMap中的每个键值对,输出不同字符的个数以及每个字符出现频率。 以下是一个实现以上逻辑的Java代码示例: ```java import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class CharacterCount { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个字符串:"); String inputString = scanner.nextLine(); Map<Character, Integer> characterMap = new HashMap<>(); for (int i = 0; i < inputString.length(); i++) { char c = inputString.charAt(i); if (characterMap.containsKey(c)) { int count = characterMap.get(c); characterMap.put(c, count + 1); } else { characterMap.put(c, 1); } } int differentCharacterCount = characterMap.size(); System.out.println("不同字符的个数:" + differentCharacterCount); for (Map.Entry<Character, Integer> entry : characterMap.entrySet()) { System.out.println("字符 " + entry.getKey() + " 出现次数:" + entry.getValue()); double frequency = (double) entry.getValue() / inputString.length() * 100; System.out.println("字符 " + entry.getKey() + " 的出现频率:" + String.format("%.2f", frequency) + "%"); } } } ``` 使用这段代码用户可以输入任意字符串,并在控制台上得到该字符串中不同字符的个数以及每个字符出现频率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值