標籤:
Java提供的Collator拼音排序中,發現“怡”字總排在最後解決方案如下:
實現Comparator介面,利用pinyin4j將要比較的字串轉化成相應的拼音字串,然後再比較。
所需jar包:pinyin4j-2.5.0.jar;:http://pinyin4j.sourceforge.net/
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=0;i<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(); } } }
排序結果:
Java代碼
JAVA 123 李四 王二六 王五 怡情 張三 趙六
java中實現漢語拼音排序