java pinyin4j 首字母_通讯录之按汉字首字母排序 --java--pinyin4J

最近开发手机端OA系统通讯录时遇到了用汉字首字母排序的问题,各种谷歌后发现了一个轮子pinyin4J,这个轮子是可以将汉字转换成字母拼音,个人觉得很好用,完美的解决了排序的问题,分享一下。

一.工具介绍

pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min (xmlerlimin@gmail.com)。

支持同一汉字有多个发音

还支持拼音的格式化输出,比如第几声之类的,

同时支持简体中文、繁体中文转换为拼音…使用起来也非常简单。下面是其官方网址,其中提供了下载:

本文只是使用了pinyin4J的主要功能,还有更多更好耍的功能,大家可以去研究官网文档。哈哈

下载解压后的目录结构及说明如下

(1) doc : pinyin4j的api文档

(2) lib : pinyin4j的jar包

(3) src: pinyin4j的源代码

(4) CHANGELOG.txt : pinyin4j的版本更新日志

(5) COPYING.txt : LICENSE说明

(6) README.txt : pinyin4j的概要介绍

二.转换代码 // 获取汉字的首字母大写

public String getFirstSpell(String string) {

StringBuffer pybf = new StringBuffer();

char[] arr = string.toCharArray();

HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();

defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

for (int i = 0; i < arr.length; i++) {

if (arr[i] > 128) { //如果已经是字母就不用转换了

try {

//获取当前汉字的全拼

String[] temp = PinyinHelper.toHanyuPinyinStringArray(

arr[i], defaultFormat);

if (temp != null) {

pybf.append(temp[0].charAt(0));// 取首字母

}

} catch (BadHanyuPinyinOutputFormatCombination e) {

e.printStackTrace();

}

} else {

if (arr[i] >= 'a' && arr[i] <= 'z') {

arr[i] -= 32;

}

/*if (arr[0] >= 'A' && arr[0] <= 'Z') {// 将大写转换为小写

arr[0] += 32;

}*/

pybf.append(arr[i]);

}

}

return pybf.toString();

}复制代码

三.实现 Comparable 接口并且使用内部类compare重载compareTo方法实现排序代码。 Collections.sort(list, new Comparator>() {

public int compare(Map o1, Map o2) {

return getFirstSpellOne((String) o1.get("str"))

.compareTo(

getFirstSpellOne((String) o2

.get("str")));

}

});复制代码

四.测试效果

cb610ae00b5fcaf4ea0f7cfdb0a093ed.png 测试效果

五.那么问题来了

这个列子只能按字符串第一个字符的首字母来排序,比如字符串张三和赵五第一个字符首字母是一样的,那能不能再通过第二个字符三和五来进行排序呐。如果字符串的第二个字符首字母也是一样的呐,依次类推。希望哪位大神好的思路交流交流,带我装逼带我飞。。。

六.JUST DO IT

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

最后更新时间:2017年1月5日 22:56

如要转载请注明出处:z77z.oschina.io/2017/01/05/…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

助力开源生态繁荣,统信软件建设中国桌面操作系统根社区

继 React、SUSE、RedHat 宣布对俄罗斯停服后&#xff0c;近日 Ubuntu 开发商 Canonical 在俄乌冲突下也宣布对俄罗斯企业停止支持和专业服务。 这给我们敲醒了警钟&#xff1a;因为Ubuntu 事件瞄准桌面操作系统&#xff0c;桌面操作系统用户庞大&#xff0c;其安全性属于系统级…

一文详解 | 开放搜索兼容Elasticsearch做召回引擎

简介&#xff1a;开放搜索发布开源兼容版&#xff0c;支持阿里云Elasticsearch做搜索召回引擎&#xff0c;本文详细介绍阿里云ES用户如何通过接入开放搜索兼容版丰富行业分词库&#xff0c;提升查询语义理解能力&#xff0c;无需开发、算法投入&#xff0c;即可获得淘系同款搜索…

人人都是 Serverless 架构师 | 现代化 Web 应用开发实战

简介&#xff1a;本篇实战将介绍如何以超低成本构建动态的 Web 站点&#xff0c;并且实现灵活扩展&#xff0c;限流等效果&#xff0c;最后再跟大家聊一聊“现代应用”的相关概念。 相信很多同学都有过想要拥有自己的 Web 站点的想法&#xff0c;但是如果想要搭建动态的站点&a…

Gartner:如何在中国成功应用多云模式

作者 | Gartner研究总监 杜勇 供稿 | Gartner 当前&#xff0c;中国政府鼓励行业企业通过云计算技术来实施数字化转型&#xff0c;从而加速经济增长。许多企业机构已部署了私有云和单一供应商混合云&#xff0c;以实现这一目标。为了满足全球业务和本地业务需要分别部署在不同的…

java socket 线程池_程序员:java使用线程池和TCP实现简单多轮聊天系统

最近在做物联网项目,需要使用TCP和传感器进行双向交互,通过这种渠道,找到了下面的代码,写成博客主要也是为了记录一下,以后用到随时可以看。代码实现服务端package com.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.…

阿里云李飞飞:中国数据库的时与势

简介&#xff1a;数据库、操作系统和中间件并列为三大基础软件&#xff0c;无论是在银行存取款&#xff0c;还是进行健康码查询&#xff0c;我们的日常应用和企业业务背后都离不开数据库。可以说&#xff0c;没有数据库&#xff0c;就难以构建数字化底座。过去的40多年&#xf…

阿里巴巴超大规模 Kubernetes 基础设施运维体系介绍

简介&#xff1a;ASI 作为阿里集团、阿里云基础设施底座&#xff0c;为越来越多的云产品提供更多专业服务&#xff0c;托管底层 K8s 集群&#xff0c;屏蔽复杂的 K8s 门槛、透明几乎所有的基础设施复杂度&#xff0c;并用专业的产品技术能力兜底稳定性&#xff0c;让云产品只需…

数据库资深“学霸”再启程,专访数据库初创公司矩阵起源全球 CTO 田丰博士

师出名门&#xff0c;工业界履历从大厂首席工程师到创业公司 CTO&#xff0c;并能一直从事底层系统的核心研发工作&#xff0c;可能是很多优秀技术人向往的光鲜履历。不过抛弃大厂的光鲜稳定工作和成功的创业项目&#xff0c;再次加入初创公司&#xff0c;则需要比常人更大的魄…

Spring官方RSocket Broker 0.3.0发布: 快速构建你的RSocket架构

简介&#xff1a;Spring官方的RSocket Broker其实开发已经非常久了&#xff0c;我以为会伴随着Spring Cloud 2021.0发布的&#xff0c;但是没有发生。不过Spring RSocket Broker还是发布了最新的0.3版本&#xff0c;虽然还是预览版&#xff0c;但目前已经可用&#xff0c;考虑官…

Redis 6 中的多线程是如何实现的!?

作者 | 张彦飞allen来源 | 开发内功修炼Redis 是一个高性能服务端的典范。它通过多路复用 epoll 来管理海量的用户连接&#xff0c;只使用一个线程来通过事件循环来处理所有用户请求&#xff0c;就可以达到每秒数万 QPS 的处理能力。下图是单线程版本 Redis 工作的核心原理图单…

如何构建流量无损的在线应用架构 | 专题开篇

简介&#xff1a;本篇是整个《如何构建流量无损的在线应用架构》系列的第一篇&#xff0c;这一系列共三篇&#xff0c;旨在使用最为朴素的语言将影响在线应用流量稳定性的技术问题做一个归类&#xff0c;这些问题的解决方案有的只是一些代码层面的细节&#xff0c;有的需要工具…

云原生时代的运维体系进化

简介&#xff1a;基于容器、Kubernetes 等云原生技术&#xff0c;提供的开放社区标准、不可变基础设施、声明式 API 会成为企业 CloudOps 的最佳实践&#xff0c;也将在这个基础上推进数据化、智能化体系建设&#xff0c;将运维复杂性进一步下沉&#xff0c;让企业可以聚焦于自…

企业如何从 0 到 1 构建整套全链路追踪体系

简介&#xff1a;本文将分享 ARMS 在全链路追踪领域的最佳实践&#xff0c;分享主要分为四部分。首先&#xff0c;是对分布式链路追踪的整体简介。其次&#xff0c;是对 ARMS 在分布式链路追踪领域的核心能力进行介绍。然后&#xff0c;介绍如何从 0 到 1 构建整套全链路追踪体…

React18 的 useEffect 新特性为什么被疯狂吐槽?

作者 | 零一来源 | 前端印象react18 已经出来一段时间了&#xff0c;create-react-app 默认安装的 React 版本也已经是 18&#xff0c;不知道有没有小伙伴发现自己有点看不懂 React 了&#xff1f;import { useEffect, useState } from reactfunction App () {const [data, set…

如何构建一个流量无损的在线应用架构 | 专题中篇

简介&#xff1a;本篇是整个《如何流量无损的在线应用架构》系列的第二篇&#xff0c;这一系列共三篇&#xff0c;旨在使用最为朴素的语言将影响在线应用流量稳定性的技术问题做一个归类&#xff0c;这些问题的解决方案有的只是一些代码层面的细节&#xff0c;有的需要工具进行…

一文读懂蓝绿发布、A/B 测试和金丝雀发布的优缺点

简介&#xff1a;目前&#xff0c;业界已经总结出了几种常见的服务发布策略来解决版本升级过程中带来的流量有损问题。本文首先会对这些普遍的发布策略进行简单的原理解析&#xff0c;最后结合阿里云的云原生网关对这些发布策略进行实践。 作者 | 扬少 背景 目前&#xff0c…

Kafka 到底有多高可靠?

作者 | 敖丙来源 | 敖丙什么叫可靠性&#xff1f;大家都知道&#xff0c;系统架构有三高&#xff1a;「高性能、高并发和高可用」&#xff0c;三者的重要性不言而喻。对于任意系统&#xff0c;想要同时满足三高都是一件非常困难的事情&#xff0c;大型业务系统或者传统中间件都…

阿里云张振尧:阿里云边缘云驱动5G时代行业新价值

简介&#xff1a;近日&#xff0c;以“5G融合通信趋势下的技术创新”为主题的2021中国增值电信及虚拟运营高峰论坛在北京召开&#xff0c;阿里云边缘云高级产品专家张振尧发表了《阿里云边缘云驱动5G时代行业新价值》主题演讲&#xff0c;分享了阿里云边缘云作为5G时代的新基础…

美的工业技术亮相2022汉诺威工业博览会,助力全球工业向数字化与可持续迈进

2022年5月31日&#xff0c;2022汉诺威工业博览会开幕并重启线下展览&#xff0c;美的工业技术以“科技驱动&#xff0c;拥抱高效、绿色、智能的工业未来”为主题&#xff0c;携旗下工业自动化品牌“高创”、 “合康新能”和“东菱”&#xff0c;以覆盖自动化、绿色能源领域的领…

hyengine - 面向移动端的高性能通用编译/解释引擎

简介&#xff1a;手机淘宝客户端在历史上接过多种多样的脚本引擎&#xff0c;用于支持的语言包括&#xff1a;js/python/wasm/lua&#xff0c;其中js引擎接过的就有&#xff1a;javascriptcore/duktape/v8/quickjs 等多个。众多的引擎会面临共同面临包大小及性能相关的问题&…