TreeMap 中文排序问题 (怪)

henry_fuzr 2009-11-16 11:27:05

package com.zjbell.hibernate.buss;

import java.text.Collator;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;

public class TreeMapTest {

public static void main(String[] args) {
Collator cmp = Collator.getInstance(Locale.CHINA);
Map<String, String> map = new TreeMap<String, String>(cmp);
map.put("c", "c");
map.put("a", "a");
map.put("b", "b");
map.put("d", "d");
map.put("麒麟", "麒麟");
map.put("鲍家", "鲍家");
map.put("安吉", "安吉");
map.put("阿详", "阿详");
map.put("重桥", "重桥");
map.put("泗水", "泗水");
Set<Entry<String, String>> s = map.entrySet();
Iterator<Entry<String, String>> i = s.iterator();
while(i.hasNext()){
Entry<String, String> e = i.next();
System.out.println(e.getKey() + " : " + e.getValue());
}
}
}




发现部分字 无法按拼音排序 ”麒“,“泗”,无法解决。
不知道用,pingyin4j可不可以。
...全文
587 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
justinavril 2009-11-16
  • 打赏
  • 举报
回复
我的输出是:
a : a
b : b
c : c
d : d
阿详 : 阿详
安吉 : 安吉
鲍家 : 鲍家
重桥 : 重桥
泗水 : 泗水
麒麟 : 麒麟

查了下“泗”是6CD7,而“麒”是9E92。
hbgzg3006 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chdw 的回复:]
JDK是按Unicode大小排序的,虽说Unicode大小基本按拼音,但是也有例外的。

所以如果你想按拼音排序,得自己来维护和比较才行
[/Quote]
是这样的,默认排序可以去看String的compare,是先转换成char的(unicode)。如果unicode中没有该字的编码,那你只能是想办法去重写与之相关的方法,按照其他编码(比如gbk)来比较。
closewbq 2009-11-16
  • 打赏
  • 举报
回复
可能得需要建立个拼音库了!
ChDw 2009-11-16
  • 打赏
  • 举报
回复
JDK是按Unicode大小排序的,虽说Unicode大小基本按拼音,但是也有例外的。

所以如果你想按拼音排序,得自己来维护和比较才行
sunnauq 2009-11-16
  • 打赏
  • 举报
回复
试了下,果然如此,呵呵,帮顶一下吧
HelloAldis 2009-11-16
  • 打赏
  • 举报
回复
中文的复杂有时是很难完美解决的
就比如有多音字怎么办 他按那个读音都是问题
这是必然存在问题的 所以才说必要对多样化的东西进行排序 这是缺陷
晴天1999 2009-11-16
  • 打赏
  • 举报
回复
新手哈!多多指教!
feizm 2009-11-16
  • 打赏
  • 举报
回复
我觉得pinyin4j还是会出现多音字排序的问题的,虽然可能在此例中能解决楼主的问题,
但是还是面临多音字排序的问题。
我觉得楼上几位说用GBK等排序来排才能排出唯一且有章可循的次序,当然,不知道是否能满足LZ的要求
hjjk123 2009-11-16
  • 打赏
  • 举报
回复
学习...
timeriver_wang 2009-11-16
  • 打赏
  • 举报
回复
严格的汉字排序,用pinyin4j可以实现的
import net.sourceforge.pinyin4j.PinyinHelper;
自己下个包就可以了
mystery1004 2009-11-16
  • 打赏
  • 举报
回复
key 用拼音

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧