Android 实现中文按拼音排序方法

难点:汉字转为拼音。

https://github.com/promeG/TinyPinyin

是首先获取的Bean对象:

for (int i = 0; i < dataList.size(); i++) {
//将汉字转化为拼音,并以“,”隔开 如:北京市 -> BEI,JIN,SHI
String s = Pinyin.toPinyin(dataList.get(i).platformName, ",");
String[] strarr = s.split(",");
//取首字母
for (int m = 0; m < strarr.length; m++) {
strarr[m] = strarr[m].substring(0, 1);

}
StringBuffer sb = new StringBuffer();
for (int n = 0; n < strarr.length; n++) {
sb.append(strarr[n]);
}
//s2=BJS
String s2 = sb.toString();
Log.e(TAG, "vgetPlatformListByLetter: s2=" + s2);
//bean的成员变量赋值
dataList.get(i).namePinYin = s2;
}


/**
     * 进行冒泡排序
     *list 根据bean的成员变量namePinYin 排序
     * @param list
     */
    public void transferList(List<IndexModel> list) {
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = 0; j < list.size() - 1 - i; j++) {
                exchangeNameOrder(j, list);
            }
        }
    }

    /**
     * 交换两个名字的顺序,根据首字母判断
     *
     * @param j
     * @param list
     */
    public void exchangeNameOrder(int j, List<IndexModel> list) {
        String namePinYin1 = list.get(j).namePinYin;
        String namePinYin2 = list.get(j + 1).namePinYin;

        int size = namePinYin1.length() >= namePinYin2.length() ? namePinYin2.length() : namePinYin1.length();
        for (int i = 0; i < size; i++) {
            if (!list.get(j).belongLetter.equals(list.get(j + 1).belongLetter)) {
                break;
            }
            char jc = namePinYin1.charAt(i);
            char jcNext = namePinYin2.charAt(i);
            if (jc < jcNext) {//A在B之前就不用比较了
                break;
            }
            if (jc > jcNext) {//A在B之后就直接交换,让A在前面B在后面
                IndexModel nameBean = list.get(j);
                list.set(j, list.get(j + 1));
                list.set(j + 1, nameBean);
                break;
            }
            //如果AB一样就继续比较后面的字母
        }
    }
//大数向后移动,每趟排序确定这一趟的最大值,就像冒泡一样。
public void sort_maopao(int arr[]){
    for (int i = 0; i < arr.length-1; i++) {
        for (int j = 0; j <arr.length-1-i ; j++) {
            if (arr[i]>arr[i+1]) {
                int temp=arr[i+1];
                arr[i+1]=arr[i];
                arr[i+1]=temp;
            }
        }
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值