利用PinYin4j 实现List中的对象按数字,字母, 汉字排序
要排序的对象:
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
利用PinYin4j 实现List中的对象按数字,字母, 汉字排序的更多相关文章
- 如何对List集合中的对象进行按某个属性排序
我们在实际的开发工作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序 当list集合中的元素类型是我们自定义类型时,有两种对list中的元素进行排序的方法: 方法一 让l ...
- javascript 中关于对象转换数字值的一些特点
下面是摘至<Javascript 高级程序设计第三版>里的一段话 是关于对象转换数字值的一些规则 "在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值.然后 ...
- 对List中每个对象元素按时间顺序排序
需求: 需要对List中的每个User按照birthday顺序排序,时间由小到大排列. 代码实现: import java.text.SimpleDateFormat; import java.uti ...
- coding++:对List中每个对象元素按时间顺序排序
需求: 需要对List中的每个User按照birthday顺序排序,时间由小到大排列. package com.tree.ztree_demo.orderby; import java.text.Si ...
- 【java】之对List中每个对象元素按时间顺序排序
import java.text.SimpleDateFormat; import java.util.*; public class ListSort { public static class U ...
- 使用sort对数组中的对象的某个属性进行排序
var data=[ { code: "10004", grade: "5.6", planQuantity: 220, }, { code: "10 ...
- python 利用split读取文本文件中每一行的数字并保存至相应文件夹
import re from numpy import * def getStr(file_path,file_path1): fp = open(file_path, 'r') op = open( ...
- 关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案
首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICAL_M ...
- 【学习笔记】Java中生成对象的5中方法
概述:本文介绍以下java五种创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.使用Class类的newInstance方法 3.运用反射手段,调用java.lang.re ...
随机推荐
- C# 控制连接超时
首先连接超时分为三种,TCP Connection to SQL Server -> SqlConnection.Open -> SqlCommand.Execute先说第二种超时,sql ...
- Oracle通过sqlplus spool导入导出数据
第一部分(实例,主要分两步),第二部分(参数小总结),第三部分(完全参数总结) 第一部分 第一步 :这是我的导出数据的脚本call.sqlconn scott/tigerset echo offset ...
- HttpContext.Current.Cache在控制台下不工作
说明: Cache 类不能在 ASP.NET 应用程序外使用.它是为在 ASP.NET 中用于为 Web 应用程序提供缓存而设计和测试的.在其他类型的应用程序(如控制台应用程序或 Windows 窗体 ...
- oracle监听服务无法打开
原因: 修改了主机名,但没有修改监听文件listener.ora里面的配置. 解决办法:修改HOST与主机名相同 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION ...
- awk 手册--【转载】
1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l awk 适于解决哪些问题 ? l awk 常见的解题模式为何 ? 为使读者快速掌握awk解 ...
- java静态块
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的 静态代码块的初始化顺序 class Parent{ static String name = &q ...
- uploadify的用法与动态传参 提供demo下载
---恢复内容开始--- 官网:http://www.uploadify.com/ 一款不错的上传插件.官方文档http://www.uploadify.com/documentation/ 用法 ...
- Oracle-记录学习
--select name,count(id) from work_test group by name having count(id)>1--select upper(name),t.*,l ...
- 多条件查询(php+mysql) 租房子例子
<body> <?php //多条件 $tiaojian2= " 2=2 "; $attr2 = ""; //判断区域 if(!empty($ ...
- WDCP控制面板如何安装PDO_mysql组件
http://osacar.iteye.com/blog/2098431 执行wget -c http://down.wdlinux.cn/in/pdo_mysql_ins.sh再执行chmod 75 ...