import java.util.Arrays
import java.util.Comparator
import net.sourceforge.pinyin4j.PinyinHelper
public class PinYinSort {
public static void main(String[] args) {
String[] arr={ "王二六","张三", "李四", "王五","赵六", "JAVA", "123","怡情"}
Arrays.sort(arr,new ComparatorPinYin())
for (String string : arr) {
System.out.println(string)
}
}
/**
* 功能:实现汉语拼音序比较
*
*/
static class ComparatorPinYin implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
return ToPinYinString(o1).compareTo(ToPinYinString(o2))
}
private String ToPinYinString(String str){
StringBuilder sb=new StringBuilder()
String[] arr=null
for(int i=0i<str.length()i++){
arr=PinyinHelper.toHanyuPinyinStringArray(str.charAt(i))
if(arr!=null && arr.length>0){
for (String string : arr) {
sb.append(string)
}
}
}
return sb.toString()
}
}
}
自己封装的一个工具类,可以将汉字按照拼音的首字母排序,支持对Model和字典排序.只能对首字母排序,不支持第二个字母, 实现的原理就是创建一个A-Z的数组,数组中的元素是字典,字典中有两个元素,一个是title,就是当前的首字母 A-Z中的一个,另一个是保存当前title对应的元素的数组,对传入的数组进行遍历获得数组中的一个元素,如果是Model或者字典通过传入的key的值获得要排序的字符串,获得字符串的拼音的首字母,判断拼音的首字母是A-Z中的哪一个,然后放到数组中的对应的字典的数组中.
后来又做了一个对英文的首字母排序的程序,原理和上面的一样,还省略了将汉字转化为拼音的步骤。工具类的名称是:NH_OrderByPinYinFirstLetter。
代码:使用的时候直接调用下面的方法就行,是一个加号方法,第一个参数是保存要排序的元素的数组,第二个参数:如果数组中是Model或者字典,就写排序的依据的key值,如果数组中不是Model或字典,就写nil。
[objc] view plain copy
// 方法
+ (NSMutableArray *)baseOrderPinYinOnArr:(NSMutableArray *)arr ByKey:(NSString *)key 返回值的类
// 返回一个有24个元素的数组,数组里的元素是字典
// 字典里有两对键值对
// title : 当前的拼音首字母 A - Z
// datas : 当前的拼音首字母对应的model所组成的数组