欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

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

时间:2023-04-25
姓名,地址按照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;@Datapublic 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; }

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。