获取汉字的五笔,全拼和双拼的工具类
如题,项目需要,首先可用的自然是pinyin4j.
在不考虑多音字的情况下,全拼自然搞定.
双拼只是替换了全拼的声母和韵母,使用正则和对照也可以搞定.就是要注意声母中并没有y和w,但是常用拼音中却有,正则中要加入这两个.
五笔的话,参看我上一篇文章.
这里放出工具类,注意引入pinyin4j-2.5.jar包
public class StringUtil {/*** 匹配单个字符全拼的声母和韵母,声母可能不存在.注意y和w,虽然不在声母范围,但是居首也是有可能的*/private static final Pattern psp = Pattern.compile("^([bpmfdtnlgkhjqxrzcsyw]{0,2})([aeiouv][a-z]*)$");private static HanyuPinyinOutputFormat hpof;private static Properties wb86;private static Properties shuangPin;static {// 拼音格式hpof = new HanyuPinyinOutputFormat();hpof.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出全小写hpof.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不显示音调hpof.setVCharType(HanyuPinyinVCharType.WITH_V);// ü替换为v// 五笔数据wb86 = new Properties();try {wb86.load(new BufferedInputStream(StringUtil.class.getResourceAsStream("wb86.properties")));} catch (IOException e) {e.printStackTrace();}// 双拼shuangPin = new Properties();try {shuangPin.load(new BufferedInputStream(StringUtil.class.getResourceAsStream("sp.properties")));} catch (IOException e) {e.printStackTrace();}}/*** 字符转化为拼音.无法转换返回null,转换成功返回所有的发音* * @param c* @return*/public static String[] charToPinyin(char c) {if (c < 0x4E00 || c > 0x9FA5) {// GBK字库在unicode中的起始和结束位置if (c != 0x3007) {// 圆圈0比较特殊,需要处理一下return null;}}try {return PinyinHelper.toHanyuPinyinStringArray(c, hpof);} catch (BadHanyuPinyinOutputFormatCombination e) {return null;}}/*** 获取单个字符的双拼,顺序和全拼一致* * @param c* @return*/public static String[] charToShuangPin(char c) {String[] array = charToPinyin(c);if (array == null) {return array;}String[] result = new String[array.length];for (int i = 0; i < array.length; i++) {String s = array[i];Matcher m = psp.matcher(s);if (m.matches()) {String sm = m.group(1);String smdz = shuangPin.getProperty(sm);String ym = m.group(2);String ymdz = shuangPin.getProperty(ym);String r = "";if (smdz != null) {r = smdz;}if (ymdz != null) {r += ymdz;}result[i] = r;} else {System.err.println("分解" + c + "拼音的拼音时发生错误!无法拆分出声母和韵母.");}}return result;}/*** 返回字符串的拼音的首字母,每个多音字只取第一个发音.* * @param s* @return*/public static String toPinyinShouZiMu(String s) {if (s == null || s.length() == 0) {return null;}StringBuilder sb = new StringBuilder();for (char c : s.toCharArray()) {String[] r = charToPinyin(c);if (r == null) {sb.append(c);} else {String py = r[0];if (py.length() > 0) {sb.append(py.charAt(0));}}}return sb.toString();}/*** 返回字符串的拼音,全拼,每个字的首字母大写,每个多音字只取第一个发音.* * @param s* @return*/public static String toQuanPin(String s) {if (s == null || s.length() == 0) {return null;}StringBuilder sb = new StringBuilder();for (char c : s.toCharArray()) {String[] r = charToPinyin(c);if (r == null) {sb.append(c);} else {String py = r[0];if (py.length() > 0) {char f = Character.toUpperCase(py.charAt(0));// if ((f == 'A' || f == 'O' || f == 'E') && sb.length() >// 0) {// aoe 开头的音节连接在其它音节后面的时候,如果音节的界限发生混淆,用隔音符号(')隔开,例如// pí'ǎo(皮袄)xī'ān(西安)。// py = "'" + f + py.substring(1);// } else {py = f + py.substring(1);// }}sb.append(py);}}return sb.toString();}/*** 返回字符串的双拼.多音字只取第一个发音.每个字的首字母大写* * @param s* @return*/public static String toShuangPin(String s) {if (s == null || s.length() == 0) {return null;}StringBuilder sb = new StringBuilder();for (char c : s.toCharArray()) {String[] r = charToShuangPin(c);if (r == null) {sb.append(c);} else {String py = r[0];if (py.length() > 0) {char f = Character.toUpperCase(py.charAt(0));py = f + py.substring(1);}sb.append(py);}}return sb.toString();}/*** 字符转化为五笔(86),无法转化返回null* * @param c* @return*/public static String[] charToWubi(char c) {if (c < 0x4E00 || c > 0x9FA5) {// GBK字库在unicode中的起始和结束位置return null;}String result = wb86.getProperty(Integer.toHexString(c).toUpperCase());if (result == null) {return null;}if (result.contains(",")) {return result.split(",");} else {return new String[] { result };}}public static void main(String[] args) {System.out.println(toQuanPin("中华人民共和国--外交部"));System.out.println(toShuangPin("中华人民共和国--外交部"));System.out.println(toPinyinShouZiMu("中华人民共和国--外交部"));System.out.println(toShuangPin("壹仟贰佰叁拾肆亿伍仟陆佰柒拾捌万玖仟零壹拾贰元叁角肆分"));System.out.println(Arrays.deepToString(charToWubi('啊')));System.out.println(Arrays.deepToString(charToWubi('A')));System.out.println(Arrays.deepToString(charToWubi('工')));}}
两个properties文件看附件,和工具类放在一个包下
输出结果:
ZhongHuaRenMinGongHeGuo--WaiJiaoBu
VsHwRfMnGsHeGo--WlJcBu
zhrmghg--wjb
YiQmRBlSjUiSiYiWuQmLuBlQiUiBaWjJqQmL;YiUiRYrSjJcSiFf
[kb, kbs, kbsk]
null
[a, aaa, aaaa]
获取汉字的五笔,全拼和双拼的工具类相关推荐
- Redhat Linux 9/AS 3上安装清华紫光拼音输入法智能五笔全拼等
Redhat Linux 9/AS 3上安装清华紫光拼音输入法智能五笔全拼等 版权声明:本文可以任意转载,转载时请保持文章的完整性,并以超链接形式标明文章原始出处和作者信息及本声明. [url]htt ...
- java获取汉字拼音_Java获取汉字对应的拼音(全拼或首字母)
Java 根据汉语字符串获得对应的拼音字符串或者拼音首字母字符串等操作,需要添加jar包: 代码实现: import java.util.regex.Matcher; import java.util ...
- java全拼_Java获取汉字对应的拼音(全拼或首字母)
java 根据汉语字符串获得对应的拼音字符串或者拼音首字母字符串等操作,需要添加jar包: 引入包 代码实现: import java.util.regex.matcher; import java. ...
- JAVA获取汉字首字母以及全拼
使用Hutool工具类 官网链接 以下为Hutool支持的拼音库的pom坐标,你可以选择任意一个引入项目中,如果引入多个,Hutool会按照以上顺序选择第一个使用. <dependency> ...
- linux双拼输入法,百度输入法Linux版下载:支持在Ubuntu下用全拼、双拼、五笔
百度输入法Linux版发布下载了,已提供Ubuntu_Deepin-fcitx-baidupinyin-64.zip包下载,支持Ubuntu 18.04/18.10/19.04/19.10和Deepi ...
- oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)
oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等) oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下 1.获得全拼 SELECT GETHZPY.GETHZFULLPY( ...
- C# 汉字转拼音(全拼)
/// <summary> /// 汉字转拼音类 /// </summary> public class Hz2Py { private static int[] py ...
- C# 获取汉字的对应的全拼音和拼音首字母(含源码)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Java 中文转拼音/汉字转拼音, 中文转五笔/汉字转五笔, 下载字典!
Java 中文转拼音/汉字转拼音, 中文转五笔/汉字转五笔, 下载字典! 源码 CharacterElement.java 源码 Dict.java 输出拼音 输出五笔 输出全部 字典下载地址 源码 ...
- APISpace 汉字转五笔API
五笔的好处 重码的很少,选取字的时候快,所以打字的速度就很快 不认识的字也能打出来 最近在 APISpace 上面看到了 汉字转五笔API,在这里分享给大家,看看大家有没有这方面的需求,可以帮助到你们 ...
最新文章
- nero结果,对应的分析。如下。
- MATLAB实时标定
- jdk安装失败_jenkins全局工具jdk、maven安装
- windows服务autofac注入quartz任务
- 前端学习(3282):立即执行函数
- django ModuleNotFoundError: No module named 'tinymce***'
- ping不通Linux系统解决方法
- 特斯拉蛇形充电机器人_特斯拉将内存设备锁入手套箱内 确保哨兵模式/TeslaCam数据安全...
- linux unzip到指定目录
- 【luogu3373】模板 线段树 2
- BNS100数码人像采集系统产品说明书
- 电子商务概论(农)之形考作业二
- 学习笔记:弱监督学习-valse青年会议
- 你以为在做的是微服务?不!你做的只是分布式单体!
- 光学成像系统的模型及MATLAB仿真
- 腾讯云播放器隐藏音频播放的按钮
- visio画立体图_Microsoft Office Visio绘制三维正方体图形的详细操作步骤
- CORTEX-A系列处理器
- 快速分享 Wi-Fi 密码教程
- 新旧版本表格数据对比差异流程
热门文章
- 疫情中的云与教育:“停课不停学”背后的百度技术密码
- 云计算与大数据概论第十一周(2)
- 十、线程(11 章)
- 游戏服务器哪种系统稳定,游戏服务器一般用什么系统吗
- 比特精灵是计算机病毒吗,[病毒防治]靠,我居然也中木马?
- 大学英语综合教程二 Unit 1 到Unit 8 课文内容英译中 中英翻译
- iOS 面向切面编程与typhoon框架
- linux挂载NTFS格式硬盘
- 计算机格式化为ntfs,WinXP下怎么把U盘格式化成NTFS格式?XP下把U盘格式化成NTFS格式图文教程...
- java file.length 单位_Java File length()用法及代码示例