栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

姓名,地址按照A,B,C......来排序java

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

姓名,地址按照A,B,C......来排序java

姓名,地址按照A,B,C…来排序 java代码:

导入依赖: 查询首字母的读音

        
            com.belerweb
            pinyin4j
            2.5.0
        

获取首字母工具类,对于多音字只取第一个读音

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ChineseCharacterUtil {

    
    public static String getUpperCase(String chinese, boolean isFull) {
        return convertHanzi2Pinyin(chinese, isFull).toUpperCase();
    }


    
    public static String getLowerCase(String chinese, boolean isFull) {
        return convertHanzi2Pinyin(chinese, isFull).toLowerCase();
    }


    
    private static String convertHanzi2Pinyin(String hanzi, boolean isFull) {
        
        String regExp = "^[u4E00-u9FFF]+$";
        StringBuffer sb = new StringBuffer();
        if (hanzi == null || "".equals(hanzi.trim())) {
            return "";
        }
        String pinyin = "";
        for (int i = 0; i < hanzi.length(); i++) {
            char unit = hanzi.charAt(i);
            //是汉字,则转拼音
            if (match(String.valueOf(unit), regExp)) {
                pinyin = convertSingleHanzi2Pinyin(unit);
                if (isFull) {
                    sb.append(pinyin);
                } else {
                    sb.append(pinyin.charAt(0));
                }
            } else {
                sb.append(unit);
            }
        }
        return sb.toString();
    }


    
    private static String convertSingleHanzi2Pinyin(char hanzi) {
        HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
        outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        String[] res;
        StringBuffer sb = new StringBuffer();
        try {
            res = PinyinHelper.toHanyuPinyinStringArray(hanzi, outputFormat);
            sb.append(res[0]);//对于多音字,只用第一个拼音
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
        return sb.toString();
    }


    
    private static boolean match(String str, String regex) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        return matcher.find();
    }

}

首字母和首字母对应的数据集合对象:

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class AreaLetter implements Comparable{
    private String letter;

    private List list =new ArrayList<>();

//需要按照首字母排序 实现Comparable接口
    @Override
    public int compareTo(AreaLetter o) {
        return this.letter.compareTo(o.getLetter());
    }
}

//代码逻辑实现

public List getAreaLetter() {
        // 从数据库查询的姓名或者地址集合
        List list = meterReadingAreaService.getArea();
        List stringList = new ArrayList<>();
        //将区域名称和编码拼接到一起
        for (MeterReadingAreaEntity meterReadingAreaEntity : list) {
           stringList.add(meterReadingAreaEntity.getMeterAreaName().trim()+","+meterReadingAreaEntity.getMeterAreaCode());
        }
        Comparator com= Collator.getInstance(java.util.Locale.CHINA);
        //将区域名称根据英文字母进行排序
        Collections.sort(stringList, com);
        List areaLetterList=new ArrayList<>();
        String str;
        AreaLetter areaLetter = new AreaLetter();
        //将相同读音的放在一起 多音字取第一个读音
        loop:for (int i = 0; i < stringList.size(); i++) {
            str= ChineseCharacterUtil.getUpperCase(stringList.get(i),false).substring(0,1);
            for (AreaLetter letter : areaLetterList) {
                if (letter.getLetter().equals(str)) {
                    letter.getList().add(stringList.get(i));
                    //跳转到指定位置继续执行 此处continue可以换成break
                    continue loop;
                }
            }
            if(i>0&&!(ChineseCharacterUtil.getUpperCase(stringList.get(i-1),false).substring(0,1)).equals(str)){
                areaLetter = new AreaLetter();
                areaLetter.setLetter(str);
                areaLetter.getList().add(stringList.get(i));
                areaLetterList.add(areaLetter);
                continue;
            }
            areaLetter.setLetter(str);
            areaLetter.getList().add(stringList.get(i));
            areaLetterList.add(areaLetter);

        }
        //根据字符串AreaLetter.getLetter()排序 如A,B,C,D,E,F,G...
        Collections.sort(areaLetterList);
        return areaLetterList;
    }
 

第一次写,是个菜鸟,有问题 希望大家指出来,谢谢大家

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号