java 中文排序

/**
 * 原创by flyinsky
 * 转载请注明出处
 */
package com.yjz;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

import net.sourceforge.pinyin4j.PinyinHelper;

public class PinyinComparator implements Comparator {

    private String concatPinyinStringArray(String[] pinyinArray) {
        StringBuffer pinyinStrBuf = new StringBuffer();

        if ((null != pinyinArray) && (pinyinArray.length > 0)) {
            for (int i = 0; i < pinyinArray.length; i++) {
                pinyinStrBuf.append(pinyinArray[i]);
            }
        }
        String outputString = pinyinStrBuf.toString();
        return outputString;
    }

    public int compare(Object o1, Object o2) {

    	int length1 = ((String)o1).length();
    	int length2 = ((String)o2).length();

    	int length = length1 - length2 > 0 ? length2:length1;

    	for(int i=0;i<length;i++)
    	{
    		 char c1 = ((String) o1).charAt(i);
    	     char c2 = ((String) o2).charAt(i);

    	     String c1topinyin =concatPinyinStringArray(PinyinHelper.toHanyuPinyinStringArray(c1));
    	     String c2topinyin =concatPinyinStringArray(PinyinHelper.toHanyuPinyinStringArray(c2));

    	     if("".equals(c1topinyin) && "".equals(c2topinyin))
    	     {
    	    	 if(c1 - c2 == 0)
    	    	 {
	    	    	 continue;
    	    	 }
    	    	 else
    	    	 {
    	    		 return c1 - c2;
    	    	 }

    	     }
    	     else if("".equals(c1topinyin) && !"".equals(c2topinyin))
    	     {
    	    	 return -1;
    	     }
    	     else if(!"".equals(c1topinyin) && "".equals(c2topinyin))
    	     {
    	    	 return 1;
    	     }
    	     else
    	     {
    	    	 int pinyinCompareValue = c1topinyin.compareTo(c2topinyin);
	    	     if( pinyinCompareValue == 0)
	    	     {
	    	    	 if(c1 - c2 == 0)
	    	    	 {
	    	    		continue;
	    	    	 }
	    	    	 else
	    	    	 {
	    	    		 //同音字按笔画比较 先不实现
	    	    		 return c1 - c2;
	    	    	 }

	    	     }
	    	     return pinyinCompareValue;
    	     }
    	}

       return length1-length2;
    }

    public static void main(String[] args) {
        String[] data = {"13","12","123a","1234","123","张a","李四","张a1","章a","9","7","镕","C","H","张A","重申","重量"};
        List list = Arrays.asList(data);
        Arrays.sort(data, new PinyinComparator());
        System.out.println(list);
    }

}

你可能感兴趣的:(java,C++,c,.net,C#)