本人简单的写了一个中英文混合排序的demo ,用java写的,希望各位大神多多指教。
这个demo引用了一个第三方jar包(pinyin4j.jar)
以下为代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.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;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
public class PinYinPX {
//定义一个集合
static List<String> list=new ArrayList<>();
//生成一个String 集合
public static void paixu(){
list.add("张三");
list.add("lisi");
list.add("zhaowu");
list.add("王六");
list.add("刘七");
list.add("阿巴");
list.add("alen");
list.add("久吧");
list.add("123");
list.add("32");
//创建比较器
Compar c=new Compar();
//调用集合的快速排序方法
Collections.sort(list, c);
//打印结果
System.out.println(list.toString());
}
public static void main(String[] args) {
//开始排序
paixu();
}
//实现比较器类
static class Compar implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
// 此处配置第三方jar包的属性 第三方jar包(pinyin4j.jar)
HanyuPinyinOutputFormat format=new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE); //设置大小写
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); //设置是否显示声调
format.setVCharType(HanyuPinyinVCharType.WITH_V); //自己查一下
String s1=o1;
String s2=o2;
char c1=o1.charAt(0);
char c2=o2.charAt(0);
//判断是不是中文字符
if(String.valueOf(c1).matches("[\u4e00-\u9fa5]")){
try {
String[] strs1=PinyinHelper.toHanyuPinyinStringArray(c1, format);
s1=strs1[0];
} catch (BadHanyuPinyinOutputFormatCombination e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(String.valueOf(c2).matches("[\u4e00-\u9fa5]")){
try {
String[] strs2=PinyinHelper.toHanyuPinyinStringArray(c2, format);
s2=strs2[0];
} catch (BadHanyuPinyinOutputFormatCombination e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//判断是不是英文字符
if(((int)c1>=65&&(int)c1<=90)||((int)c1>=97&&(int)c1<=122)){
s1=String.valueOf(c1);
}
if(((int)c2>=65&&(int)c2<=90)||((int)c2>=97&&(int)c2<=122)){
s2=String.valueOf(c2);
}
//最后进行比较
return s1.compareTo(s2);
}
}
}