使用pinyin4j获取汉字的拼音和全角半角转换
前段时间sprint分配了一项任务,查询一个bug,页面搜索汉字加上拼音的时候,无法匹配。最开始的时候以为拼音函数有问题,所以估了一下点就开始着手这件事情。
拼音工具类如下:
/** * 获取汉字串拼音首字母,英文字符不变 * @param chinese 汉字串 * @return 汉语拼音首字母 */public static String getFirstSpell(String chinese) {if(chinese == null){return "";}StringBuffer pybf = new StringBuffer();char[] arr = chinese.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 {pybf.append(arr[i]);}}return pybf.toString().replaceAll("\\W", "").trim();}
方法很简单,先对输入内容进行判别,如果是汉字(arr[i] > 128),那么就使用pinyin4j获取汉字的首字母,其中对于多音字的情况,我这里设置成了只取第一个,并且WITHOUT_TONE没有对几声进行辨识(相对于大多数业务都是不需要的,具体的可以查看API,如果你需要的话。);如果不是汉字的话,我就原样给它加在了返回字符串最后。然后通过repalce替换成只有字母和数字存在的字符串。
看到这里,大家或许觉得都没有问题,但是问题来了。.
输入的字符串中的字母竟然是全角的!!!!!!
我当时可是看了好久,好久,而且还无法复现问题,以为是方法出了问题。期间我对arr[i]>128进行了怀疑,然后通过正则匹配汉字(百度之),阿西吧,it doesn't work!然后我就~~~~~~被测试妹子复现了,哈哈哈哈。接着就是简单的全角转半角了啊。全角转半角的代码出处无法考核,反正是百度的。。
全角转半角代码(其中的全局变量请百度之,哈哈哈哈哈哈)
/*** 全角转半角* * @param fullWidthStr* 字符串* @return*/private static String fullWidth2halfWidth(String fullWidthStr) {if (null == fullWidthStr || fullWidthStr.length() <= 0) {return "";}char[] charArray = fullWidthStr.toCharArray();// 对全角字符转换的char数组遍历for (int i = 0; i < charArray.length; ++i) {int charIntValue = (int) charArray[i];// 如果符合转换关系,将对应下标之间减掉偏移量65248;如果是空格的话,直接做转换if (charIntValue >= SBC_CHAR_START && charIntValue <= SBC_CHAR_END) {charArray[i] = (char) (charIntValue - CONVERT_STEP);} else if (charIntValue == SBC_SPACE) {charArray[i] = (char) DBC_SPACE;}}return new String(charArray).toLowerCase();}
使用pinyin4j获取汉字的拼音和全角半角转换相关推荐
- php amp 字符串处理,php字符串处理之全角半角转换
半角全角的处理是字符串处理的常见问题,本文尝试为大家提供一个思路. 一.概念 全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E) 半角字符unicode编 ...
- java 全角_java字符全角半角转换
序 本文展示一下如何将char进行半角与全角转换. 术语 全角 SBC case Sexagesimal to Binary Converter 60进制转为2进制 半角 DBC case Decim ...
- html自动半角转全角,全角半角转换就是这么简单
在Excel表格中输入数字的时候有时会发现数字的间距特别大,这不仅不美观还占位置,那么到底是什么原因导致这样呢?其实数字间距大是因为输入法的全角半角,只要我们切换下就可以轻松解决问题了,接下来小编就来 ...
- Java 全角半角转换工具类
/*** @author: lee* @Date: 2018/11/29 09:56* @Description: 全角半角转换工具类*/ public class AsciiUtil {public ...
- java 全角数字 转 数字_JavaScript数字全角半角转换代码教程
javascript数字全角半角转换代码教程 ///全角空格为12288,半角空格为32 ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 //半角转换 ...
- Flex 日语全角半角转换
日语假名,数字,标点符号全角半角转换 可以满足以下转换 转换前: ~!@#$%^&*()_+{}|:\"<>?`-=「」\\;'、。・abcdefghijklmnopqr ...
- PHP全角和半角字符怎么区分,php字符串处理之全角半角转换,php字符串全角半角_PHP教程...
php字符串处理之全角半角转换,php字符串全角半角 半角全角的处理是字符串处理的常见问题,本文尝试为大家提供一个思路. 一.概念 全角字符unicode编码从65281~65374 (十六进制 0x ...
- python中英文半角还是全角_如何理解python3的unicode,以及全角半角转换
匿名用户 1级 2017-11-06 回答 1. unicode是一个编码的standard,表明了字符与数字之间的映射,是可变长的. 2. 映射后的数据如何编码为字节?这个就是具体的编码规则:目前最 ...
- android 判断标点符号,android 标点符号的全角半角转换
public class BCConvert { /** * ASCII表中可见字符从!开始,偏移位值为33(Decimal) */ static final ch ...
最新文章
- 排序算法---选择排序(java版)
- 基于 Android NDK 的学习之旅----- C调用Java
- 启动Tomcat的时候遇到错误
- 管家婆服务器支持者打不开,管家婆软件数据问题使用技巧
- Transfrom在64bit服务下面无法运行
- Matlab中textscan函数用法
- python大众点评霸王餐_如何抽中大众点评霸王餐?
- win10自带的框选截图快捷键
- 仿【咪咕动漫】列表下拉刷新上拉加载
- Abbexa低样本量鸡溶菌酶 C (LYZ) ELISA 试剂盒
- 四年级计算机下册word教学设计,小学教学四年级教案下册计算机教案-20210723143637.docx-原创力文档...
- 我用 python 做了款可开淘宝店赚钱的工具!
- 【Niagara Vykon N4 】物联网学习 01 Station创建
- 音频编码之opus(一)
- Linux-Day3笔记
- 【论文速递】BLIP:Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and G
- FPGA架构与HLS工具
- 从0到1构建一个基于知识图谱的智能问答系统
- C#做外挂的常用API,本人用了很久,基本没发现问题
- DNS正向解析与反向解析
热门文章
- 【GNN报告】潘世瑞: 图自监督新范式-重新思考图对比学习
- 显卡mx150和230哪个好_显卡mx150和gtx多少相当?
- 【转载】Locust实现集合点
- 工商银行EBank B2C支付接口v1.0.0.11 开发说明
- 字符串 leetcode 总结
- 黑盒测试可不只是点点点,这些5种测试工具也必须要会!
- mysql函数示例_mysql函数备忘单和示例
- 大数据6_03_Kafka命令行操作
- win10 WSL NAS搭建Time Machine服务器
- 很火的美丽天天秒—链动2+1模式来啦