统计字符串中字母出现次数的两种方法

428 阅读1分钟

统计字符串中字母出现次数的两种方法

题目:约定字符串中仅包含小写字母,统计各字母出现的次数,按照字母升序输出。

输入样例:aabzzbzbc

输出样例:a(2)b(3)c(1)z(3)

方法1:因为仅包含小写字母,所以可以构建长度为26的数组,利用char与int互转,字母a对应的ASCII码为97,所以将字符ASCII码-97作为数组下标,下字符出现次数作为数组元素。

import java.util.Scanner;

public class CountWords {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 输入a-z的小写字母
        String s = scanner.nextLine();
        short[] arr = new short[26];
        for (int i = 0, length = s.length(); i < length; i++) {
            arr[s.charAt(i) - 97]++;
        }
        for (int i = 0, length = arr.length; i < length; i++) {
            if (arr[i] > 0) {
                System.out.printf("%s(%d)", (char) (i + 97), arr[i]);
            }
        }
    }
}

方法2:JDK8+,函数式编程,一行代码搞定

import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.Collectors;

public class CountWords2 {
    public static void main(String[] args) {
        Arrays.asList(new Scanner(System.in).nextLine().split("")).stream().collect(Collectors.groupingBy(o -> o, Collectors.counting())).forEach((k, v) -> System.out.printf("%s(%d)", k, v));
    }
}