1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 中英文混合按照首字母排序

中英文混合按照首字母排序

时间:2019-12-05 00:11:34

相关推荐

中英文混合按照首字母排序

中英文混合按照首字母排序

在项目做报表的时候,客户那边提出了默认按照客户的首字母排序,做完才发现有些客户的名字是英文,所以在这边写了一个混合排序的方法。思想就是:如果检查是汉语就把拼音的首字母附在汉字的前面,调用默认的sort()方法即可。如有错误请大家指教。

1.在/下载pinyin4j.jar包

2.以下是demo源码

/***按照中文首字母排序* @author lichanghua**/public class Test10 {//主函数public static void main(String[] args) {//第一类根据数组中首字母的排序//String data[] = new String[]{"王二麻子","张三","李四","阿一","田七","AAA"}; //data = sort(data);//for(String val : data){ //System.out.println(val); //} //第二类根据集合对象的某个属性的首字母排序List<PersonBean> list = new ArrayList<PersonBean>(); PersonBean person1 = new PersonBean(); person1.setId(1); person1.setName("张三"); PersonBean person2 = new PersonBean(); person2.setId(2); person2.setName("王二麻子"); PersonBean person3 = new PersonBean(); person3.setId(3); person3.setName("阿一"); PersonBean person4 = new PersonBean(); person4.setId(4); person4.setName("田七");PersonBean person5 = new PersonBean(); person5.setId(5); person5.setName("ABHH");PersonBean person6 = new PersonBean(); person6.setId(6); person6.setName("CSHSH");list.add(person1); list.add(person2); list.add(person3); list.add(person4); list.add(person5);list.add(person6);System.out.println("排序前"); for(PersonBean person : list){ System.out.println(person.getId()+" "+person.getName()); } list = listToSortByName(list); System.out.println("排序后"); for(PersonBean person : list){ System.out.println(person.getId()+" "+person.getName());}}/*** 根据数组里面首字母排序* @param data* @return*/public static String[] sort(String [] data){ if(data==null || data.length==0){ return null; } Comparator<Object> comparator = Collator.getInstance(java.util.Locale.CHINA); Arrays.sort(data, comparator);return data; } /** * @TODO 将一个装有person对象的 list 根据name 首字母排序 * @param List 排序前的数据源 * @return list排序后的数据 */ public static List<PersonBean> listToSortByName(List<PersonBean> list){ if(list==null || list.size()==0){ return null; } Map<String, PersonBean> map = new HashMap<String, PersonBean>(); String names[] = new String[list.size()]; for(int i=0;i<list.size();i++){ String name = list.get(i).getName();String alphabet = name.substring(0, 1);/*判断首字符是否为中文,如果是中文便将首字符拼音的首字母和&符号加在字符串前面*/if (alphabet.matches("[\\u4e00-\\u9fa5]+")) {name = getAlphabet(name) + "&" + name;names[i] = name;}else{names[i]=name;}//names[i] = name; map.put(name, list.get(i)); } names = sort(names); list.clear(); for(String name : names){ if(map.containsKey(name)) list.add(map.get(name)); } return list; } /*** 调用汉子首字母转化为拼音的根据类,,需要在项目中导入pinyin4j.jar包* @param str* @return*/public static String getAlphabet(String str) {HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();// 输出拼音全部小写defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 不带声调defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);String pinyin = null;try {pinyin = (String) PinyinHelper.toHanyuPinyinStringArray(str.charAt(0), defaultFormat)[0];} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}return pinyin.substring(0, 1);}

3.运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。