Java 实现汉字按照首字母分组排序

简介: Java 实现汉字按照首字母分组排序

jar 包

<!--汉字转拼音-->
<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.1</version>
</dependency>
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/**
 * 26字母排序
 * 1、将数据list 进行排序Collections,排序后是按照汉字字母排序的
 * 2、循环找出26个字母,以字母为key,以list中相同首字母的数据为值(集合)
 * 3、需要用到 pinyin4j-2.5.0.jar 这个汉字转拼音的jar包
 */
public class AlphabeticalUtils {
    /**
     * 获取汉字串拼音,英文字符不变
     */
    public static String getFullSpell(String chinese) {
        StringBuffer pybf = new StringBuffer();
        char[] arr = chinese.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > 128) {
                try {
                    pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else {
                pybf.append(arr[i]);
            }
        }
        return pybf.toString();
    }
    /**
     * 将集合数据按照汉字首字母分组排序
     */
    public static Map<String, Object> screenManufacturer(List<String> list) {
        try {
            Collator com = Collator.getInstance(java.util.Locale.CHINA);
            // 按字母排序
            Collections.sort(list, com);
            // 输出26个字母
            Map<String, Object> map = new TreeMap<>();
            for (int i = 1; i < 27; i++) {
                String word = String.valueOf((char)(96 + i)).toUpperCase();
                // 循环找出 首字母一样的数据
                List<String> letter = new ArrayList<>();
                for (String str : list) {
                    String pybf = getFullSpell(str);
                    String zm = pybf.substring(0, 1);
                    if (word.equals(zm)) {
                        letter.add(str);
                    }
                }
                map.put(word, letter);
            }
            return map;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public  static void main(String[] args){
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("王五");
        list.add("B王五");
        list.add("A王五");
        list.add("三");
        list.add("阿拉伯");
        Map<String, Object> map = screenManufacturer(list);
        System.out.print(map);
    }
}
目录
相关文章
|
2月前
|
存储 Java 数据处理
|
5天前
|
Java
Java_获取汉字的汉语拼音首字母Java版(转)
Java_获取汉字的汉语拼音首字母Java版(转)
10 2
|
8天前
|
搜索推荐 Java Shell
8大Java排序方法(由简入繁),有代码详解和原理指导
8大Java排序方法(由简入繁),有代码详解和原理指导
32 0
|
16天前
|
监控 搜索推荐 算法
Java排序:原理、实现与应用
【4月更文挑战第28天】本文探讨了Java中的排序算法,包括原理和实现。Java利用Comparator接口进行元素比较,通过Arrays和Collections类的sort方法对数组和列表进行排序。示例展示了使用这些方法的基本代码。此外,还讨论了冒泡排序算法和自定义排序场景,以适应不同需求。理解这些排序机制有助于提升程序效率。
13 1
|
2月前
|
Java
Java对关于两个地点的根据经纬度算出后排序
Java对关于两个地点的根据经纬度算出后排序
11 0
|
2月前
|
Java
如何使用 Java 8 进行字符串排序?
【2月更文挑战第21天】
86 3
|
3月前
|
Java
Java排序
【2月更文挑战第7天】【2月更文挑战第17篇】List对象集合自定义排序,列出了以前的用法以及新用法。
30 0
|
3月前
|
存储 Java
Java TreeMap:基于红黑树的排序映射解析
Java TreeMap:基于红黑树的排序映射解析
|
3月前
|
安全 Java
Java TreeSet:基于红黑树的排序集合解析
Java TreeSet:基于红黑树的排序集合解析
|
3月前
|
Java
Java对list集合元素进行排序的几种方式
Java对list集合元素进行排序的几种方式
27 0