Java 实现汉字按照首字母分组排序
一、实现思路:
1、将数据list 进行排序Collections,排序后是按照汉字字母排序的
2、循环找出26个字母,以字母为key,以list中相同首字母的数据为值(集合)
二、代码实现:
// 这里需要用到 pinyin4j-2.5.0.jar 这个汉字转拼音的jar包
/**
* 获取汉字串拼音,英文字符不变
*/
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;
}
样例:

{
"A": ["阿拉伯"],
"B": [],
"C": [],
"D": [],
"E": [],
"F": [],
"G": [],
"H": [],
"I": [],
"J": [],
"K": [],
"L": ["李四", "李五"],
"M": [],
"N": [],
"O": [],
"P": [],
"Q": [],
"R": [],
"S": [],
"T": [],
"U": [],
"V": [],
"W": [],
"X": [],
"Y": [],
"Z": ["张三"]
}
Java 实现汉字按照首字母分组排序的更多相关文章
- 本地化下按首字母分组排序的神器——UILocalizedIndexedCollation
最近在整一个很简单的通讯录相关的项目,通讯录当然就少不了按首字母或者汉字拼音首字母分组排序索引.因为按照我一贯的的做法,都是想要做成更通用的.支持本地化的,所以这就纠结了,世界各地的语言啊我去,我顶多 ...
- java获取汉字拼音首字母 --转载
在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.Unsupp ...
- JAVA获取汉字拼音首字母
package com.common.util; import java.io.UnsupportedEncodingException; /** * 取得给定汉字串的首字母串,即声母串 * Titl ...
- Java 获取汉字串首字母并大写和获取汉字的全拼,英文字符不变
在开发中我们难免会遇到需要提出汉字中的拼音的首字母.提出汉字的拼音,接着便介绍一个工具类 pinyin4j.jar,首先需要下载 jar 包. Pinyin4j是一个功能强悍的汉语拼音工具包,是sou ...
- mysql如何给汉字按照首字母顺序排序
select * from 表名 order by convert(列明 USING gbk) COLLATE gbk_chinese_ci asc
- 在PHP中,将一个汉字数组按照拼音首字母进行排序
(之前发的这篇博文因为含有敏感关键字,只好重发一遍了) <?php $str = "我们可以在浏览器中看到,当鼠标移到元素上时,元素开始向右移动,开始比较慢,之后则比较快,移开时按原曲 ...
- 关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案
首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICAL_M ...
- C# 获取汉字拼音首字母
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ...
- AutoCompleteTextView输入汉字拼音首字母实现过滤提示(支持多音字,Filterable的使用)
AutoCompleteTextView具有输入提示的功能,但是它的这种提示不适合对股票列表的过滤,如果你玩过股票软件,就会知道只要输入股票名称的首字母或股票代码就会出现符合匹配的股票,这种过滤怎么实 ...
- C# 获取汉字拼音首字母/全拼
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ...
随机推荐
- 脚本执行sudo命令时: 免手动确认和免输入密码
1.sudo 命令有时候需要手动输入yes来确认执行 或者 软件在安装包下载完毕后还需要你输入y进行确认安装 .那如果是用脚本执行sudo 命令就可以用-y 参数来确认执行 sudo yum inst ...
- 高级测试工程师&资深测试工程师应实现的价值
一 技能 自动化: 接口自动化 web ui 自动化(selenium) 移动端自动化 二 项目支撑----项目集,不是单个项目(大小项目) 1.具体功能web 2.小程序 3.移动端 三 项目职责 ...
- linux并行执行线程
资料来源: (1) https://www.jianshu.com/p/d8d58846c53f(作者:黄甫一) 1.并行任务较少时: (1) 给需要并行运行的命令行在结尾加上"&& ...
- 使用myBadboy(python自主开发工具)启动谷歌浏览器并自动录制jmeter脚本
一.源代码下载 https://gitee.com/rmtic/mybadboy 说明:因现有的录制方法有不能定制等不足之处,所以自力更生,自动生成对应jmeter脚本,减少维护成本 二.操作说明 1 ...
- csr_matrix与ndarray类型互转
ndarry 转 csr_matrix>>> import numpy as np>>> import scipy.sparse >>> my_m ...
- 由浅入深学习SAP财务 - 高林旭 PDF 版本
由浅入深学习SAP财务 - 高林旭 PDF 版本 有需要的联系 wx :erpworld
- 【C++复习】第九章 模板与群体数据(1)
1.例:求绝对值函数的模板 函数重载方便了函数的使用者,开发者还是要写两个函数 模板是用来生成函数的东西 编译器通过推导生成函数: 2.函数模板定义语法 从例题入手,别上来就扣语法 3.例9-1 函数 ...
- dvwa sql盲注教程
原文地址:https://www.jianshu.com/p/757626cec742 一.DVWA-SQL Injection(Blind)测试分析 SQL盲注 VS 普通SQL注入: 普通SQL注 ...
- java自定义的异常类
java自定义的异常类 1.自定义异常类,需要继承 RuntimeException @Datapublic class EmployeeCheckException extends RuntimeE ...
- List进行分隔,分批插入数据库
背景,当数据集合超过一定数据量时,则会插入失败,需要将集合进行分隔,分批插入 /** * 分批插入-公共方法 * @param objects:数据集合 * @param subSize:单次插入的条 ...