具有完全的Unipre支持(Java 11+)1的最简单的方法来计算字符串中每个字符的出现次数:
String word = "AAABBB";Map<String, Long> charCount = word.prePoints().mapToObj(Character::toString) .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));System.out.println(charCount);
1)答案的结尾是具有完整Unipre支持的Java 8版本。
输出量
{A=3, B=3}更新: 对于Java 8+(不支持补充平面中的字符,例如emoji):
Map<String, Long> charCount = IntStream.range(0, word.length()) .mapToObj(i -> word.substring(i, i + 1)) .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
更新2: 同样适用于Java 8+。
我误会了,以为
prePoints()它是在Java
9之前才添加的。它是在Java
8中添加到
CharSequence接口的,因此它不会
String在Java
8 中的Javadoc 中显示,而在Java
9中为Javadoc的更高版本显示。
。
但是,
Character.toString(intprePoint)直到Java
11才添加该方法,因此要使用该
Character.toString(charc)方法,我们可以
chars()在Java
8中使用:
Map<String, Long> charCount = word.chars().mapToObj(c -> Character.toString((char) c)) .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
或完整的Unipre支持,包括。在Java
8中,我们可以使用补充平面
prePoints()和
String(int[]prePoints, int offset, intcount)构造函数:
Map<String, Long> charCount = word.prePoints() .mapToObj(cp -> new String(new int[] { cp }, 0, 1)) .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));


