利用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 ...
随机推荐
- Linux Kernel之flush_cache_all在ARM平台下是如何实现的【转】
转自:http://blog.csdn.net/u011461299/article/details/10199989 版权声明:本文为博主原创文章,未经博主允许不得转载. 在驱动程序的设计中,我们可 ...
- Java生产者消费者模型
在Java中线程同步的经典案例,不同线程对同一个对象同时进行多线程操作,为了保持线程安全,数据结果要是我们期望的结果. 生产者-消费者模型可以很好的解释这个现象:对于公共数据data,初始值为0,多个 ...
- 【css】多行文字图片混排容器内垂直居中解决方案
css: .box-wrap{display:table;width:200px;height:200px;*position:relative;}/*最外边的容器,需固定宽高*/ .box-ha ...
- 《Head First设计模式》
单件模式: 确保一个类只有一个实例,并提供一个全局访问点. 没有公开的构造函数,而采用一个公开的静态成员函数调用构造函数(使用该静态成员函数调用就是全局访问点,使用它可以在需要时才实例化对象),确保只 ...
- [thml]HTML select标签 获取选中的option的value及Text内容
很简单的select标签: <select id="hello" onchange="getContent(this.value,this.options[this ...
- YTU 2335: 0-1背包问题
2335: 0-1背包问题 时间限制: 1 Sec 内存限制: 128 MB 提交: 15 解决: 12 题目描述 试设计一个用回溯法搜索子集空间树的函数.该函数的参数包括结点可行性判定函数和上界 ...
- Animator根骨骼运动原始实现代码
实测过确实可行,注意如果没有刚体组件,实现方式会不一样 public class TestSMB : StateMachineBehaviour { public override void OnSt ...
- Winsock系列函数 及 Socket通信流程
Socket是一种网络通信机制 Winsock系列函数 1. Socket 创建socket 2. Connect 尝试连接远端Socket 3. Send 在某个Socket 向远端 ...
- PoJ(2263),Floyd,最小值中的最大值
题目链接:http://poj.org/problem?id=2263 题意:题中给出相连通不同城市之间的载货量,要求找到一条从指定起点到终点的路径,并满足载货量最大. #include <io ...
- js调用MVC3自带js验证
验证: if ($(this).is("form")) { return $(this).validate().checkForm() ...