利用PinYin4j 实现List中的对象按数字,字母, 汉字排序
2014-05-22 14:09
701 查看
要排序的对象:
排序实现:
jar 包下载地址: http://pan.baidu.com/s/1sj9A2wl
import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; public class A implements Comparable<A>{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(A o) { String regex = "^\\w.*"; if (this.getName().matches(regex) || o.getName().matches(regex)) { return this.getName().compareTo(o.getName()); } else { return genPinYin(this.getName()).compareTo(genPinYin(o.getName())); } } public static String genPinYin(String input) { if (input == null || input.trim().equals("")) { return ""; } HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.LOWERCASE); format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); format.setVCharType(HanyuPinyinVCharType.WITH_V); //多音字预先转换 这里可以处理一下多音字 char[] chars = input.trim().toCharArray(); StringBuilder output = new StringBuilder(); try { for (char c : chars) { if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) { String[] temp = PinyinHelper.toHanyuPinyinStringArray(c, format); output.append(temp[0]); } else { output.append(Character.toString(c)); } } } catch (Exception e) { System.err.println("拼音转换出现未知异常:" + input); } return output.toString(); } }
排序实现:
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test { public static void main(String[] args) { A a1 = new A(); A a2 = new A(); A a3 = new A(); A a4 = new A(); A a5 = new A(); A a6 = new A(); A a7 = new A(); A a8 = new A(); a1.setName("二维码"); a2.setName("回调"); a3.setName("接口"); a4.setName("服务窗"); a5.setName("123"); a6.setName("456"); a7.setName("zbc"); a8.setName("Abhj"); List<A> list = new ArrayList<A>(); list.add(a1); list.add(a2); list.add(a3); list.add(a4); list.add(a5); list.add(a6); list.add(a7); list.add(a8); Collections.sort(list); for (A a : list) { System.out.println(a.getName()); } } }
jar 包下载地址: http://pan.baidu.com/s/1sj9A2wl
相关文章推荐
- 利用比较接口实现List中的对象排序
- 利用比较接口实现List中的对象排序
- PHP利用ICU扩展intl快速实现汉字转拼音以及按拼音首字母分组排序
- 利用比较接口实现List中的对象排序
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- 完成将vc利用word对象的排序功能对输入的汉字进行排序
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- 利用"委托"实现类的对象实例按"多字段嵌套"排序
- 利用反射 和 comparator 实现List 的简单排序
- 日文,中文,韩文,利用Arrays.sort()对非英文排序,并与原值比较,返回(-1,0,1), 实现 Comparator接口, list 排序
- C#中List实现按照对象属性排序
- 利用排序规则特点计算汉字笔划和取得拼音首字母(转)
- 汉字字段按拼音首字母实现分组排序
- asp.net中3种验证码示例(实现代码)(数字,数字字母混和,汉字)
- C#中List实现按照对象属性排序
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- SQL SERVER的排序规则 利用排序规则特点计算汉字笔划和取得拼音首字母
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- java-实现汉字按字母顺序排序