本文的需求是将一组数据按某一字段中文拼音排序,分享给大家Android实现中文按拼音排序方法,供大家参考,具体内容如下

1、Test测试类:

PinyinComparator comparator = new PinyinComparator();

Collections.sort(strList, comparator);

其中strList中放置了数据,可以是任何对象,但要对PinyinComparator中的compare进行对应的修改,我Demo中为String[]。

2、PinyinComparator排序类:

public class PinyinComparator implements Comparator {

/**

* 比较两个字符串

*/

public int compare(Object o1, Object o2) {

String[] name1 = (String[]) o1;

String[] name2 = (String[]) o2;

String str1 = getPingYin(name1[0]);

String str2 = getPingYin(name2[0]);

int flag = str1.compareTo(str2);

return flag;

}

/**

* 将字符串中的中文转化为拼音,其他字符不变

*

* @param inputString

* @return

*/

public String getPingYin(String inputString) {

HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();

format.setCaseType(HanyuPinyinCaseType.LOWERCASE);

format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

format.setVCharType(HanyuPinyinVCharType.WITH_V);

char[] input = inputString.trim().toCharArray();// 把字符串转化成字符数组

String output = "";

try {

for (int i = 0; i < input.length; i++) {

// \\u4E00是unicode编码,判断是不是中文

if (java.lang.Character.toString(input[i]).matches(

"[\\u4E00-\\u9FA5]+")) {

// 将汉语拼音的全拼存到temp数组

String[] temp = PinyinHelper.toHanyuPinyinStringArray(

input[i], format);

// 取拼音的第一个读音

output += temp[0];

}

// 大写字母转化成小写字母

else if (input[i] > 'A' && input[i] < 'Z') {

output += java.lang.Character.toString(input[i]);

output = output.toLowerCase();

}

output += java.lang.Character.toString(input[i]);

}

} catch (Exception e) {

Log.e("Exception", e.toString());

}

return output;

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐