题目:约定字符串中仅包含小写字母,统计各字母出现的次数,按照字母升序输出。
输入样例: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));
}
}