特殊字符、数字开头,及中英文字符排序(类似通讯录)

近期做项目需要实现组织用户下的个人用户按其名称排序,因此写了个按字符排序的工具类供大家参考

        这里按照字符串第一个字符,使用java原生排序的方式,即特殊字符-->数字-->英文-->中文,为了能够将英文字符串和中文字符串的首字母排列在一起,先将汉字的首字母提取出来加到该中文字符之前进行排序,完成排序后再将该字母去掉。(这里需要用到pinyin4j-2.5.0.jar)

         首先,根据传入的字符串数组返回一个完成排序的列表

public static List chineseAndEnglishSort(String[] arrays){
        List list = new ArrayList<>();
        for (int i = 0; i < arrays.length; i++) {
            String str = arrays[i];
            String alphabet = str.substring(0, 1);
	  /*判断首字符是否为中文,如果是中文便将首字符拼音的首字母和&符号加在字符串前面*/
            if (alphabet.matches("[\\u4e00-\\u9fa5]+")) {
                str = getAlphabet(str) + "&" + str;
                arrays[i] = str;
            }
        }
	 /*设置排序语言环境*/
        Comparator com = Collator.getInstance(java.util.Locale.CHINA);
        Arrays.sort(arrays, com);

	 /*遍历数组,去除标识符&及首字母*/
        for (int i=0;i 
             进一步,为了能够将特殊字符、字母开头的字符串和中英文字符串按照二十六个字母区别开来,这里采用返回长度为28的列表方式,将分类排序好的字符串列表返回  
   
public static List> chineseAndEnglishSortByChar(String[] arrays){
        List specCharList = new ArrayList<>();
        List digitList = new ArrayList<>();
        List> listGroup = new ArrayList>();
        for (int i = 0; i < arrays.length; i++) {
            String str = arrays[i];
            String alphabet = str.substring(0, 1);
              /*判断首字符是否为中文,如果是中文便将首字符拼音的首字母和&符号加在字符串前面*/
            if (alphabet.matches("[\\u4e00-\\u9fa5]+")) {
                str = getAlphabet(str) + "&" + str;
                arrays[i] = str;
            }
        }
             /*设置排序语言环境*/
        Comparator com = Collator.getInstance(java.util.Locale.CHINA);
        Arrays.sort(arrays, com);
        for(int i = 0;i list = new ArrayList<>();
                    while((i=arrays.length)||((i 
    
   
            测试代码
public static void main(String[] args) {
        String[] arrays = new String[] { "吴彦祖", "lilin", "987明天","yao", "$89ada","_adgq","@%$^117", "房祖名", "光辉女郎", "43165hsk","gg123", 
                                        "#^&hs", "梅艳芳", "123科比", "tom","Tom", "xiaoming000" };
        List list = new ArrayList<>();
        List> listGroup = chineseAndEnglishSortByChar(arrays);
        System.out.println("listGroup.size():"+listGroup.size());
        for(int i = 0; i iterator = list.iterator();
            while(iterator.hasNext()){

                System.out.print(iterator.next()+", ");
            }
        }
    }
        

你可能感兴趣的:(算法)