【发布时间】:2016-12-09 16:19:53
【问题描述】:
我正在开发一个小应用程序,它可以计算文本中的字符出现并打印一个简单的报告。它基于 TreeMap。它应该适用于任何 UTF-8(迄今为止)可编码语言。当我尝试通过调用Collator.getInstance() 来使用标准整理器时,我得到了异常java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.String。
有没有 Char 整理器?
static Map<Character, Integer> map = new TreeMap<>();
TreeMap 构造函数可以使用整理器,但不能用于 Chars。
public static void main(String[] args) {
InputStream in = System.in;
try {
if (in.available() == 0) System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
count(in);
printMap();
}
static void count(InputStream in) {
new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))
.lines()
.forEach(x -> tallyCharArray(x.toCharArray()));
}
static void tallyCharArray (char[] chars) {
for (int i=0; i<chars.length; i++) {
map.merge(chars[i], 1, Integer::sum);
}
}
static void printMap() {
map.entrySet().stream()
.forEach(x -> System.out.println(x.getKey() + "\t" + x.getValue()));
}
比较问题
static Map<Character, Integer> map = new TreeMap<>(
Collator.getInstance().compare(String.valueOf(c1), String.valueOf(c2))
);
这很笨拙,而且还不起作用。如何将c1和c2与地图绑定?
【问题讨论】:
-
您可以使用
collator.compare(String.valueOf(c1), String.valueOf(c2));,其中c1和c2是字符。 -
我不知道。考虑使用
String.valueOf(char), -
@Andreas 好吧,它也打印出来了。
-
我添加了关于
String.valueOf的更新。