java将汉字转成拼音并按照首字母排序的有效方法。

工作日志记录:在做项目中碰到一个需求就是需要将从服务器获取到的json对象按照username字段实现汉字排序,排序的规则是按照拼音的首字母从a~z,实现方式如下:


获得json之后提取其中的bean对象的bean类:

public class IMUserDetailInfo implements Parcelable{


    private String positional;

    private String avator;

    private String company;
    private String userName;
    private String appUserId;
    private String imId;
    private int friendReqId;
    private int userFriendId;
    private String isFriend;
    private String initialLetter;


    public String getInitialLetter() {
        if(initialLetter == null){
            HanZiToPinyinUtil.setUserInitialLetter(this);
        }
        return initialLetter;
    }

    public void setInitialLetter(String initialLetter) {
        this.initialLetter = initialLetter;
    }
    public String getIsFriend() {
        return isFriend;
    }

    public void setIsFriend(String isFriend) {
        this.isFriend = isFriend;
    }

    public String getPositional() {
        return positional;
    }

    public void setPositional(String positional) {
        this.positional = positional;
    }

    public String getAvator() {
        return avator;
    }

    public void setAvator(String avator) {
        this.avator = avator;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }


    public String getAppUserId() {
        return appUserId;
    }

    public void setAppUserId(String appUserId) {
        this.appUserId = appUserId;
    }

    public int getUserFriendId() {
        return userFriendId;
    }

    public void setUserFriendId(int userFriendId) {
        this.userFriendId = userFriendId;
    }

    public String getImId() {
        return imId;
    }

    public void setImId(String imId) {
        this.imId = imId;
    }

    public int getFriendReqId() {
        return friendReqId;
    }

    public void setFriendReqId(int friendReqId) {
        this.friendReqId = friendReqId;
    }


    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.avator);
        dest.writeString(this.appUserId);
        dest.writeString(this.userName);
        dest.writeString(this.positional);
        dest.writeString(this.company);
        dest.writeString(this.imId);
        dest.writeInt(this.friendReqId);
    }

    public IMUserDetailInfo() {
    }

    protected IMUserDetailInfo(Parcel in) {
        this.avator = in.readString();
        this.appUserId = in.readString();
        this.userName = in.readString();
        this.positional=in.readString();
        this.company=in.readString();
        this.imId=in.readString();
        this.friendReqId=in.readInt();
        this.userFriendId=in.readInt();
        this.isFriend=in.readString();
    }


    public static final Creator<IMUserDetailInfo> CREATOR = new Creator<IMUserDetailInfo>() {
        @Override
        public IMUserDetailInfo createFromParcel(Parcel source) {
            return new IMUserDetailInfo(source);
        }

        @Override
        public IMUserDetailInfo[] newArray(int size) {
            return new IMUserDetailInfo[size];
        }
    };

}

其中的initialLetter标识的就是username的首字母;


HanZiToPinyinUtil类如下:

import android.text.TextUtils;

import java.util.ArrayList;

import demo.hs.util.HanZiToPinyin;

/**
 * Created by Administrator on 2017/8/29 0029.
 */

public class HanZiToPinyinUtil {

    /**
     * set initial letter of according user's nickname( username if no nickname)
     *
     * @param user
     */
    public static void setUserInitialLetter(IMUserDetailInfo user) {
        final String DefaultLetter = "#";
        String letter = DefaultLetter;
        final class GetInitialLetter {
            String getLetter(String name) {
                if (TextUtils.isEmpty(name)) {
                    return DefaultLetter;
                }
                char char0 = name.toLowerCase().charAt(0);
                if (Character.isDigit(char0)) {
                    return DefaultLetter;
                }
                ArrayList<HanZiToPinyin.Token> l = HanZiToPinyin.getInstance().get(name.substring(0, 1));
                if (l != null && l.size() > 0 && l.get(0).target.length() > 0)
                {
                    HanZiToPinyin.Token token = l.get(0);
                    String letter = token.target.substring(0, 1).toUpperCase();
                    char c = letter.charAt(0);
                    if (c < 'A' || c > 'Z') {
                        return DefaultLetter;
                    }
                    return letter;
                }
                return DefaultLetter;
            }
        }
        if ( !TextUtils.isEmpty(user.getUserName()) ) {
            letter = new GetInitialLetter().getLetter(user.getUserName());
            user.setInitialLetter(letter);
            return;
        }
        if (letter.equals(DefaultLetter) && !TextUtils.isEmpty(user.getUserName())) {
            letter = new GetInitialLetter().getLetter(user.getUserName());
        }
        user.setInitialLetter(letter);

    }
}

HanZiToPinyin类如下:
import android.text.TextUtils;

import java.text.Collator;
import java.util.ArrayList;
import java.util.Locale;

/**
 * Created by Administrator on 2017/8/29 0029.
 */

public class HanZiToPinyin {
    private static final String TAG = "HanZiToPinyin";
    private static final boolean DEBUG = false;
    public static final char[] UNIHANS = new char[]{'阿', '哎', '安', '肮', '凹', '八', '挀', '扳', '邦', '勹', '陂', '奔', '伻', '屄', '边', '灬', '憋', '汃', '冫', '癶', '峬', '嚓', '偲', '参', '仓', '撡', '冊', '嵾', '曽', '曾', '層', '叉', '芆', '辿', '伥', '抄', '车', '抻', '沈', '沉', '阷', '吃', '充', '抽', '出', '欻', '揣', '巛', '刅', '吹', '旾', '逴', '呲', '匆', '凑', '粗', '汆', '崔', '邨', '搓', '咑', '呆', '丹', '当', '刀', '嘚', '扥', '灯', '氐', '嗲', '甸', '刁', '爹', '丁', '丟', '东', '吺', '厾', '耑', '襨', '吨', '多', '妸', '诶', '奀', '鞥', '儿', '发', '帆', '匚', '飞', '分', '丰', '覅', '仏', '紑', '伕', '旮', '侅', '甘', '冈', '皋', '戈', '给', '根', '刯', '工', '勾', '估', '瓜', '乖', '关', '光', '归', '丨', '呙', '哈', '咍', '佄', '夯', '茠', '诃', '黒', '拫', '亨', '噷', '叿', '齁', '乯', '花', '怀', '犿', '巟', '灰', '昏', '吙', '丌', '加', '戋', '江', '艽', '阶', '巾', '坕', '冂', '丩', '凥', '姢', '噘', '军', '咔', '开', '刊', '忼', '尻', '匼', '肎', '劥', '空', '抠', '扝', '夸', '蒯', '宽', '匡', '亏', '坤', '扩', '垃', '来', '兰', '啷', '捞', '肋', '勒', '崚', '刕', '俩', '奁', '良', '撩', '列', '拎', '刢', '溜', '囖', '龙', '瞜', '噜', '娈', '畧', '抡', '罗', '呣', '妈', '埋', '嫚', '牤', '猫', '么', '呅', '门', '甿', '咪', '宀', '喵', '乜', '民', '名', '谬', '摸', '哞', '毪', '嗯', '拏', '腉', '囡', '囔', '孬', '疒', '娞', '恁', '能', '妮', '拈', '嬢', '鸟', '捏', '囜', '宁', '妞', '农', '羺', '奴', '奻', '疟', '黁', '郍', '喔', '讴', '妑', '拍', '眅', '乓', '抛', '呸', '喷', '匉', '丕', '囨', '剽', '氕', '姘', '乒', '钋', '剖', '仆', '七', '掐', '千', '呛', '悄', '癿', '亲', '狅', '芎', '丘', '区', '峑', '缺', '夋', '呥', '穣', '娆', '惹', '人', '扔', '日', '茸', '厹', '邚', '挼', '堧', '婑', '瞤', '捼', '仨', '毢', '三', '桒', '掻', '閪', '森', '僧', '杀', '筛', '山', '伤', '弰', '奢', '申', '莘', '敒', '升', '尸', '収', '书', '刷', '衰', '闩', '双', '谁', '吮', '说', '厶', '忪', '捜', '苏', '狻', '夊', '孙', '唆', '他', '囼', '坍', '汤', '夲', '忑', '熥', '剔', '天', '旫', '帖', '厅', '囲', '偷', '凸', '湍', '推', '吞', '乇', '穵', '歪', '弯', '尣', '危', '昷', '翁', '挝', '乌', '夕', '虲', '仚', '乡', '灱', '些', '心', '星', '凶', '休', '吁', '吅', '削', '坃', '丫', '恹', '央', '幺', '倻', '一', '囙', '应', '哟', '佣', '优', '扜', '囦', '曰', '晕', '筠', '筼', '帀', '災', '兂', '匨', '傮', '则', '贼', '怎', '増', '扎', '捚', '沾', '张', '长', '長', '佋', '蜇', '贞', '争', '之', '峙', '庢', '中', '州', '朱', '抓', '拽', '专', '妆', '隹', '宒', '卓', '乲', '宗', '邹', '租', '钻', '厜', '尊', '昨', '兙', '', ''};
    public static final byte[][] PINYINS = new byte[][]{{(byte)65, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)65, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)65, (byte)78, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)65, (byte)78, (byte)71, (byte)0, (byte)0, (byte)0}, {(byte)65, (byte)79, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)66, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)69, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)66, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)73, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)66, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)66, (byte)73, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)73, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)66, (byte)79, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)66, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)67, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)90, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)67, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)65, (byte)73, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)67, (byte)72, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)69, (byte)78, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)69, (byte)78, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)69, (byte)78, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)69, (byte)78, (byte)71, (byte)0}, {(byte)67, (byte)72, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)79, (byte)78, (byte)71, (byte)0}, {(byte)67, (byte)72, (byte)79, (byte)85, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)85, (byte)65, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)85, (byte)65, (byte)73, (byte)0}, {(byte)67, (byte)72, (byte)85, (byte)65, (byte)78, (byte)0}, {(byte)67, (byte)72, (byte)85, (byte)65, (byte)78, (byte)71}, {(byte)67, (byte)72, (byte)85, (byte)73, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)85, (byte)78, (byte)0, (byte)0}, {(byte)67, (byte)72, (byte)85, (byte)79, (byte)0, (byte)0}, {(byte)67, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)67, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)67, (byte)85, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)67, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)68, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)68, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)73, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)73, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)68, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)68, (byte)73, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)68, (byte)73, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)68, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)68, (byte)85, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)68, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)69, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)69, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)69, (byte)78, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)69, (byte)78, (byte)71, (byte)0, (byte)0, (byte)0}, {(byte)69, (byte)82, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)70, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)70, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)70, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)70, (byte)69, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)70, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)70, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)70, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)70, (byte)79, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)70, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)70, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)71, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)69, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)71, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)71, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)85, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)85, (byte)65, (byte)73, (byte)0, (byte)0}, {(byte)71, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)71, (byte)85, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)71, (byte)85, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)71, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)72, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)69, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)72, (byte)77, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)72, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)85, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)85, (byte)65, (byte)73, (byte)0, (byte)0}, {(byte)72, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)72, (byte)85, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)72, (byte)85, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)72, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)74, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)74, (byte)73, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)74, (byte)73, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)74, (byte)73, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)74, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)74, (byte)73, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)74, (byte)73, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)74, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)74, (byte)73, (byte)79, (byte)78, (byte)71, (byte)0}, {(byte)74, (byte)73, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)74, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)74, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)74, (byte)85, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)74, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)75, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)75, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)75, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)85, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)85, (byte)65, (byte)73, (byte)0, (byte)0}, {(byte)75, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)75, (byte)85, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)75, (byte)85, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)75, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)76, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)69, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)76, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)73, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)73, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)76, (byte)73, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)76, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)76, (byte)73, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)73, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)76, (byte)73, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)79, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)76, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)76, (byte)85, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)76, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)77, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)69, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)77, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)73, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)77, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)77, (byte)73, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)73, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)77, (byte)73, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)79, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)77, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)78, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)69, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)78, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)73, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)78, (byte)73, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)78, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)78, (byte)73, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)73, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)78, (byte)73, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)78, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)78, (byte)85, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)78, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)79, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)79, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)80, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)69, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)80, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)73, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)80, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)80, (byte)73, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)73, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)80, (byte)79, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)80, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)81, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)81, (byte)73, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)81, (byte)73, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)81, (byte)73, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)81, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)81, (byte)73, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)81, (byte)73, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)81, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)81, (byte)73, (byte)79, (byte)78, (byte)71, (byte)0}, {(byte)81, (byte)73, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)81, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)81, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)81, (byte)85, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)81, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)82, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)82, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)82, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)85, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)82, (byte)85, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)82, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)83, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)65, (byte)73, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)83, (byte)72, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)69, (byte)78, (byte)0, (byte)0}, {(byte)88, (byte)73, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)69, (byte)78, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)69, (byte)78, (byte)71, (byte)0}, {(byte)83, (byte)72, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)79, (byte)85, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)85, (byte)65, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)85, (byte)65, (byte)73, (byte)0}, {(byte)83, (byte)72, (byte)85, (byte)65, (byte)78, (byte)0}, {(byte)83, (byte)72, (byte)85, (byte)65, (byte)78, (byte)71}, {(byte)83, (byte)72, (byte)85, (byte)73, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)85, (byte)78, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)85, (byte)79, (byte)0, (byte)0}, {(byte)83, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)83, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)83, (byte)85, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)84, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)84, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)73, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)84, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)84, (byte)73, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)84, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)84, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)84, (byte)85, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)84, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)87, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)87, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)87, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)87, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)87, (byte)69, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)87, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)87, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)87, (byte)79, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)87, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)88, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)88, (byte)73, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)88, (byte)73, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)88, (byte)73, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)88, (byte)73, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)88, (byte)73, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)88, (byte)73, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)88, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)88, (byte)73, (byte)79, (byte)78, (byte)71, (byte)0}, {(byte)88, (byte)73, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)88, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)88, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)88, (byte)85, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)88, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)89, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)73, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)73, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)89, (byte)79, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)89, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)89, (byte)85, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)74, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)89, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)65, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)65, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)65, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)65, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)90, (byte)65, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)69, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)69, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)69, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)69, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)65, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)65, (byte)73, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)67, (byte)72, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)90, (byte)72, (byte)65, (byte)78, (byte)71, (byte)0}, {(byte)90, (byte)72, (byte)65, (byte)79, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)69, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)69, (byte)78, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)69, (byte)78, (byte)71, (byte)0}, {(byte)90, (byte)72, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)79, (byte)78, (byte)71, (byte)0}, {(byte)90, (byte)72, (byte)79, (byte)85, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)85, (byte)65, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)85, (byte)65, (byte)73, (byte)0}, {(byte)90, (byte)72, (byte)85, (byte)65, (byte)78, (byte)0}, {(byte)90, (byte)72, (byte)85, (byte)65, (byte)78, (byte)71}, {(byte)90, (byte)72, (byte)85, (byte)73, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)85, (byte)78, (byte)0, (byte)0}, {(byte)90, (byte)72, (byte)85, (byte)79, (byte)0, (byte)0}, {(byte)90, (byte)73, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)79, (byte)78, (byte)71, (byte)0, (byte)0}, {(byte)90, (byte)79, (byte)85, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)85, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)85, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)90, (byte)85, (byte)73, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)85, (byte)78, (byte)0, (byte)0, (byte)0}, {(byte)90, (byte)85, (byte)79, (byte)0, (byte)0, (byte)0}, {(byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0}, {(byte)83, (byte)72, (byte)65, (byte)78, (byte)0, (byte)0}, {(byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0}};
    private static final String FIRST_PINYIN_UNIHAN = "阿";
    private static final String LAST_PINYIN_UNIHAN = "\u9fff";
    private static final Collator COLLATOR;
    private static HanZiToPinyin sInstance;
    private final boolean mHasChinaCollator;

    protected HanZiToPinyin(boolean var1) {
        this.mHasChinaCollator = var1;
    }

    public static HanZiToPinyin getInstance() {
        Class var0 = HanZiToPinyin.class;
        synchronized(HanZiToPinyin.class) {
            if(sInstance != null) {
                return sInstance;
            } else {
                Locale[] var1 = Collator.getAvailableLocales();
                Locale[] var2 = var1;
                int var3 = var1.length;

                for(int var4 = 0; var4 < var3; ++var4) {
                    Locale var5 = var2[var4];
                    if(var5.equals(Locale.CHINA) || var5.getLanguage().equals("zh") && var5.getCountry().equals("HANS")) {
                        sInstance = new HanZiToPinyin(true);
                        return sInstance;
                    }
                }

//                EMLog.w("HanZiToPinyin", "There is no Chinese collator, HanZiToPinyin is disabled");
                sInstance = new HanZiToPinyin(true);
                return sInstance;
            }
        }
    }

    private static boolean doSelfValidation() {
        char var0 = UNIHANS[0];
        String var1 = Character.toString(var0);
        char[] var2 = UNIHANS;
        int var3 = var2.length;

        for(int var4 = 0; var4 < var3; ++var4) {
            char var5 = var2[var4];
            if(var0 != var5) {
                String var6 = Character.toString(var5);
                int var7 = COLLATOR.compare(var1, var6);
                if(var7 >= 0) {
//                    EMLog.e("HanZiToPinyin", "Internal error in Unihan table. The last string \"" + var1 + "\" is greater than current string \"" + var6 + "\".");
                    return false;
                }

                var1 = var6;
            }
        }

        return true;
    }

    private HanZiToPinyin.Token getToken(char var1) {
        HanZiToPinyin.Token var2 = new HanZiToPinyin.Token();
        String var3 = Character.toString(var1);
        var2.source = var3;
        int var4 = -1;
        if(var1 < 256) {
            var2.type = 1;
            var2.target = var3;
            return var2;
        } else {
            int var5 = COLLATOR.compare(var3, "阿");
            if(var5 < 0) {
                var2.type = 3;
                var2.target = var3;
                return var2;
            } else {
                if(var5 == 0) {
                    var2.type = 2;
                    var4 = 0;
                } else {
                    var5 = COLLATOR.compare(var3, "\u9fff");
                    if(var5 > 0) {
                        var2.type = 3;
                        var2.target = var3;
                        return var2;
                    }

                    if(var5 == 0) {
                        var2.type = 2;
                        var4 = UNIHANS.length - 1;
                    }
                }

                var2.type = 2;
                int var7;
                if(var4 < 0) {
                    int var6 = 0;
                    var7 = UNIHANS.length - 1;

                    while(var6 <= var7) {
                        var4 = (var6 + var7) / 2;
                        String var8 = Character.toString(UNIHANS[var4]);
                        var5 = COLLATOR.compare(var3, var8);
                        if(var5 == 0) {
                            break;
                        }

                        if(var5 > 0) {
                            var6 = var4 + 1;
                        } else {
                            var7 = var4 - 1;
                        }
                    }
                }

                if(var5 < 0) {
                    --var4;
                }

                StringBuilder var9 = new StringBuilder();

                for(var7 = 0; var7 < PINYINS[var4].length && PINYINS[var4][var7] != 0; ++var7) {
                    var9.append((char)PINYINS[var4][var7]);
                }

                var2.target = var9.toString();
                if(TextUtils.isEmpty(var2.target)) {
                    var2.type = 3;
                    var2.target = var2.source;
                }

                return var2;
            }
        }
    }

    public ArrayList<HanZiToPinyin.Token> get(String var1) {
        ArrayList var2 = new ArrayList();
        if(this.mHasChinaCollator && !TextUtils.isEmpty(var1)) {
            int var3 = var1.length();
            StringBuilder var4 = new StringBuilder();
            int var5 = 1;

            for(int var6 = 0; var6 < var3; ++var6) {
                char var7 = var1.charAt(var6);
                if(var7 == 32) {
                    if(var4.length() > 0) {
                        this.addToken(var4, var2, var5);
                    }
                } else if(var7 < 256) {
                    if(var5 != 1 && var4.length() > 0) {
                        this.addToken(var4, var2, var5);
                    }

                    var5 = 1;
                    var4.append(var7);
                } else {
                    HanZiToPinyin.Token var8 = this.getToken(var7);
                    if(var8.type == 2) {
                        if(var4.length() > 0) {
                            this.addToken(var4, var2, var5);
                        }

                        var2.add(var8);
                        var5 = 2;
                    } else {
                        if(var5 != var8.type && var4.length() > 0) {
                            this.addToken(var4, var2, var5);
                        }

                        var5 = var8.type;
                        var4.append(var7);
                    }
                }
            }

            if(var4.length() > 0) {
                this.addToken(var4, var2, var5);
            }

            return var2;
        } else {
            return var2;
        }
    }

    private void addToken(StringBuilder var1, ArrayList<HanZiToPinyin.Token> var2, int var3) {
        String var4 = var1.toString();
        var2.add(new HanZiToPinyin.Token(var3, var4, var4));
        var1.setLength(0);
    }

    static {
        COLLATOR = Collator.getInstance(Locale.CHINA);
    }

    public static class Token {
        public static final String SEPARATOR = " ";
        public static final int LATIN = 1;
        public static final int PINYIN = 2;
        public static final int UNKNOWN = 3;
        public int type;
        public String source;
        public String target;

        public Token() {
        }

        public Token(int var1, String var2, String var3) {
            this.type = var1;
            this.source = var2;
            this.target = var3;
        }
    }
}


获取到原始集合数据之后需要排序的方法如下,也就是要实现comparator接口:

Collections.sort(datas, new Comparator<IMUserDetailInfo>() {
    @Override
    public int compare(IMUserDetailInfo lhs, IMUserDetailInfo rhs) {
        if(lhs.getInitialLetter().equals(rhs.getInitialLetter())){
            return  lhs.getUserName().compareTo(rhs.getUserName());
        }else {
            return lhs.getInitialLetter().compareTo(rhs.getInitialLetter());
        }
    }
});

Android用于装载数据的listview的adapter实现类如下,这个类使用的时候有的导入类需要换成自己的类:

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseIntArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.Filter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SectionIndexer;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.hyphenate.easeui.EaseConstant;
import com.hyphenate.util.EMLog;

import java.util.ArrayList;
import java.util.List;

import jp.wasabeef.glide.transformations.CropCircleTransformation;

/**
 * Created by Administrator on 2017/8/29 0029.
 */

public class MyIMEaseContactAdapter extends ArrayAdapter<IMUserDetailInfo> implements SectionIndexer {
    private static final String TAG = "ContactAdapter";
    List<String> list;
    List<IMUserDetailInfo> userList;
    List<IMUserDetailInfo> copyUserList;
    private LayoutInflater layoutInflater;
    private SparseIntArray positionOfSection;
    private SparseIntArray sectionOfPosition;
    private int res;
    private MyIMEaseContactAdapter.MyFilter myFilter;
    private boolean notiyfyByFilter;
    private Context context;

    public MyIMEaseContactAdapter(Context context, int resource, List<IMUserDetailInfo> objects) {
        super(context, resource, objects);
        this.userList = objects;
        this.context=context;
        copyUserList = new ArrayList<IMUserDetailInfo>();
        copyUserList.addAll(objects);
        layoutInflater = LayoutInflater.from(context);
    }

    public void setDatas(List<IMUserDetailInfo> datas){
        if(this.userList!=null){
            this.userList.clear();
            this.userList=datas;
        }
        notifyDataSetChanged();
    }

    public void addDatas(List<IMUserDetailInfo> datas){
        if(datas!=null){
            this.userList.addAll(datas);
        }
        notifyDataSetChanged();
    }

    private class MyViewHolder{
        public  ImageView  iv_contactimg;
        public TextView tv_imcontaact_name;
        public TextView tv_imcontactcompany;
        public ImageView iv_jiahaoyou;
        public RelativeLayout rl_imcontact;
        public CheckBox ck_selectif;
        public TextView headerView;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        MyViewHolder holder;
        if (convertView == null) {
            holder = new MyViewHolder();
            convertView = layoutInflater.inflate(R.layout.item_imcontact, null);
            holder.iv_contactimg = (ImageView) convertView.findViewById(R.id.iv_contactimg);
            holder.tv_imcontaact_name = (TextView) convertView.findViewById(R.id.tv_imcontaact_name);
            holder.tv_imcontactcompany = (TextView) convertView.findViewById(R.id.tv_imcontactcompany);
            holder.rl_imcontact = (RelativeLayout) convertView.findViewById(R.id.rl_imcontact);
            holder.iv_jiahaoyou=(ImageView)convertView.findViewById(R.id.iv_jiahaoyou);
            holder.ck_selectif=(CheckBox)convertView.findViewById(R.id.ck_selectif);
            holder.headerView = (TextView) convertView.findViewById(R.id.header);
            convertView.setTag(holder);
        } else {
            holder = (MyViewHolder) convertView.getTag();
        }

        final IMUserDetailInfo user = getItem(position);
        if(user == null)
            Log.d("ContactAdapter", position + "");
        String username = user.getUserName();
        String header = user.getInitialLetter();
        holder.ck_selectif.setVisibility(View.GONE);
        holder.iv_jiahaoyou.setVisibility(View.GONE);

        if (position == 0 || header != null && !header.equals(getItem(position - 1).getInitialLetter())) {
            if (TextUtils.isEmpty(header)) {
                holder.headerView.setVisibility(View.GONE);
            } else {
                holder.headerView.setVisibility(View.VISIBLE);
                holder.headerView.setText(header);
            }
        } else {
            holder.headerView.setVisibility(View.GONE);
        }

        /*EaseAvatarOptions avatarOptions = EaseUI.getInstance().getAvatarOptions();
        if(avatarOptions != null && holder.avatar instanceof EaseImageView) {
            EaseImageView avatarView = ((EaseImageView) holder.avatar);
            if (avatarOptions.getAvatarShape() != 0)
                avatarView.setShapeType(avatarOptions.getAvatarShape());
            if (avatarOptions.getAvatarBorderWidth() != 0)
                avatarView.setBorderWidth(avatarOptions.getAvatarBorderWidth());
            if (avatarOptions.getAvatarBorderColor() != 0)
                avatarView.setBorderColor(avatarOptions.getAvatarBorderColor());
            if (avatarOptions.getAvatarRadius() != 0)
                avatarView.setRadius(avatarOptions.getAvatarRadius());
        }*/

//        EaseUserUtils.setUserNick(username, holder.nameView);
//        EaseUserUtils.setUserAvatar(getContext(), username, holder.avatar);
//
//
//        if(primaryColor != 0)
//            holder.nameView.setTextColor(primaryColor);
//        if(primarySize != 0)
//            holder.nameView.setTextSize(TypedValue.COMPLEX_UNIT_PX, primarySize);
//        if(initialLetterBg != null)
//            holder.headerView.setBackgroundDrawable(initialLetterBg);
//        if(initialLetterColor != 0)
//            holder.headerView.setTextColor(initialLetterColor);
        Glide.with(context).load(user.getAvator())
                .placeholder(R.mipmap.image_header_mine_default).error(R.mipmap.image_header_mine_default).bitmapTransform(new CropCircleTransformation(context)).into(holder.iv_contactimg);

        holder.tv_imcontaact_name.setText(user.getUserName());

        holder.tv_imcontactcompany.setText(user.getCompany()+user.getPositional());

        holder.rl_imcontact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                IMChatActivity.startIMChatActivity(context, EaseConstant.CHATTYPE_SINGLE, String.valueOf(user.getAppUserId()));
            }
        });

        return convertView;
    }

    @Override
    public IMUserDetailInfo getItem(int position) {
        return super.getItem(position);
    }

    @Override
    public int getCount() {
        return super.getCount();
    }

    @Override
    public int getPositionForSection(int section) {
        return positionOfSection.get(section);
    }

    @Override
    public int getSectionForPosition(int position) {
        return sectionOfPosition.get(position);
    }

    @Override
    public Object[] getSections() {
        positionOfSection = new SparseIntArray();
        sectionOfPosition = new SparseIntArray();
        int count = getCount();
        list = new ArrayList<String>();
        list.add(getContext().getString(R.string.search_header));
        positionOfSection.put(0, 0);
        sectionOfPosition.put(0, 0);
        for (int i = 1; i < count; i++) {

            String letter = getItem(i).getInitialLetter();
            int section = list.size() - 1;
            if (list.get(section) != null && !list.get(section).equals(letter)) {
                list.add(letter);
                section++;
                positionOfSection.put(section, i);
            }
            sectionOfPosition.put(i, section);
        }
        return list.toArray(new String[list.size()]);
    }

    @Override
    public Filter getFilter() {
        if(myFilter==null){
            myFilter = new MyFilter(userList);
        }
        return myFilter;
    }

    protected class  MyFilter extends Filter{
        List<IMUserDetailInfo> mOriginalList = null;

        public MyFilter(List<IMUserDetailInfo> myList) {
            this.mOriginalList = myList;
        }

        @Override
        protected synchronized FilterResults performFiltering(CharSequence prefix) {
            FilterResults results = new FilterResults();
            if(mOriginalList==null){
                mOriginalList = new ArrayList<IMUserDetailInfo>();
            }
            EMLog.d(TAG, "contacts original size: " + mOriginalList.size());
            EMLog.d(TAG, "contacts copy size: " + copyUserList.size());

            if(prefix==null || prefix.length()==0){
                results.values = copyUserList;
                results.count = copyUserList.size();
            }else{

                if (copyUserList.size() > mOriginalList.size()) {
                    mOriginalList = copyUserList;
                }
                String prefixString = prefix.toString();
                final int count = mOriginalList.size();
                final ArrayList<IMUserDetailInfo> newValues = new ArrayList<IMUserDetailInfo>();
                for(int i=0;i<count;i++){
                    final IMUserDetailInfo user = mOriginalList.get(i);
                    String username = user.getUserName();

                    if(username.startsWith(prefixString)){
                        newValues.add(user);
                    }
                    else{
                        final String[] words = username.split(" ");
                        final int wordCount = words.length;

                        // Start at index 0, in case valueText starts with space(s)
                        for (String word : words) {
                            if (word.startsWith(prefixString)) {
                                newValues.add(user);
                                break;
                            }
                        }
                    }
                }
                results.values=newValues;
                results.count=newValues.size();
            }
            EMLog.d(TAG, "contacts filter results size: " + results.count);
            return results;
        }

        @Override
        protected synchronized void publishResults(CharSequence constraint,
                                                   FilterResults results) {
            userList.clear();
            userList.addAll((List<IMUserDetailInfo>)results.values);
            EMLog.d(TAG, "publish contacts filter results size: " + results.count);
            if (results.count > 0) {
                notiyfyByFilter = true;
                notifyDataSetChanged();
                notiyfyByFilter = false;
            } else {
                notifyDataSetInvalidated();
            }
        }
    }


    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
        if(!notiyfyByFilter){
            copyUserList.clear();
            copyUserList.addAll(userList);
        }
    }

    protected int primaryColor;
    protected int primarySize;
    protected Drawable initialLetterBg;
    protected int initialLetterColor;

    public MyIMEaseContactAdapter setPrimaryColor(int primaryColor) {
        this.primaryColor = primaryColor;
        return this;
    }


    public MyIMEaseContactAdapter setPrimarySize(int primarySize) {
        this.primarySize = primarySize;
        return this;
    }

    public MyIMEaseContactAdapter setInitialLetterBg(Drawable initialLetterBg) {
        this.initialLetterBg = initialLetterBg;
        return this;
    }

    public MyIMEaseContactAdapter setInitialLetterColor(int initialLetterColor) {
        this.initialLetterColor = initialLetterColor;
        return this;
    }
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <TextView
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/f2f2f2"
        android:paddingBottom="2dp"
        android:paddingLeft="10dp"
        android:paddingTop="2dp"
        android:textColor="#8a99ac"
        android:textSize="15sp"
        android:visibility="gone" />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/rl_imcontact"
        android:paddingTop="10dp"
        android:paddingLeft="@dimen/dimen_dp_10"
        android:paddingBottom="10dp"
        >
        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:id="@+id/ck_selectif"
            android:button="@null"
            android:checked="false"
            android:background="@drawable/check_box"
            android:layout_marginRight="10dp"
            />
        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:id="@+id/iv_contactimg"
            android:layout_toRightOf="@id/ck_selectif"
            android:layout_marginRight="10dp"
            android:src="@mipmap/image_header_mine_default"
            />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/iv_contactimg"
            android:orientation="horizontal"
            android:id="@+id/ll_title"
            >
            <TextView
                android:layout_width="0dp"
                android:layout_weight="2"
                android:layout_height="wrap_content"
                android:text="徐干稳·非著名程序员"
                android:singleLine="true"
                android:ellipsize="middle"
                android:textSize="@dimen/dimen_sp_13"
                android:textColor="#333440"
                android:id="@+id/tv_imcontaact_name"
                />
        </LinearLayout>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dimen_dp_10"
            android:textSize="10sp"
            android:textColor="@color/light_text_color"
            android:singleLine="true"
            android:text="山不在高,有仙则灵,水不在深,有龙则灵"
            android:ellipsize="end"
            android:layout_toRightOf="@id/iv_contactimg"
            android:layout_below="@id/ll_title"
            android:id="@+id/tv_imcontactcompany"
            />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/iv_jiahaoyou"
            android:src="@mipmap/icon_jiahaoyou"
            android:scaleType="fitXY"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            android:layout_marginRight="30dp"
            />

    </RelativeLayout>
</LinearLayout>

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值