前段时间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获取汉字的拼音和全角半角转换相关推荐

  1. php amp 字符串处理,php字符串处理之全角半角转换

    半角全角的处理是字符串处理的常见问题,本文尝试为大家提供一个思路. 一.概念 全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E) 半角字符unicode编 ...

  2. java 全角_java字符全角半角转换

    序 本文展示一下如何将char进行半角与全角转换. 术语 全角 SBC case Sexagesimal to Binary Converter 60进制转为2进制 半角 DBC case Decim ...

  3. html自动半角转全角,全角半角转换就是这么简单

    在Excel表格中输入数字的时候有时会发现数字的间距特别大,这不仅不美观还占位置,那么到底是什么原因导致这样呢?其实数字间距大是因为输入法的全角半角,只要我们切换下就可以轻松解决问题了,接下来小编就来 ...

  4. Java 全角半角转换工具类

    /*** @author: lee* @Date: 2018/11/29 09:56* @Description: 全角半角转换工具类*/ public class AsciiUtil {public ...

  5. java 全角数字 转 数字_JavaScript数字全角半角转换代码教程

    javascript数字全角半角转换代码教程 ///全角空格为12288,半角空格为32 ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 //半角转换 ...

  6. Flex 日语全角半角转换

    日语假名,数字,标点符号全角半角转换 可以满足以下转换 转换前: ~!@#$%^&*()_+{}|:\"<>?`-=「」\\;'、。・abcdefghijklmnopqr ...

  7. PHP全角和半角字符怎么区分,php字符串处理之全角半角转换,php字符串全角半角_PHP教程...

    php字符串处理之全角半角转换,php字符串全角半角 半角全角的处理是字符串处理的常见问题,本文尝试为大家提供一个思路. 一.概念 全角字符unicode编码从65281~65374 (十六进制 0x ...

  8. python中英文半角还是全角_如何理解python3的unicode,以及全角半角转换

    匿名用户 1级 2017-11-06 回答 1. unicode是一个编码的standard,表明了字符与数字之间的映射,是可变长的. 2. 映射后的数据如何编码为字节?这个就是具体的编码规则:目前最 ...

  9. android 判断标点符号,android 标点符号的全角半角转换

    public class BCConvert {     /**      * ASCII表中可见字符从!开始,偏移位值为33(Decimal)      */     static final ch ...

最新文章

  1. 排序算法---选择排序(java版)
  2. 基于 Android NDK 的学习之旅----- C调用Java
  3. 启动Tomcat的时候遇到错误
  4. 管家婆服务器支持者打不开,管家婆软件数据问题使用技巧
  5. Transfrom在64bit服务下面无法运行
  6. Matlab中textscan函数用法
  7. python大众点评霸王餐_如何抽中大众点评霸王餐?
  8. win10自带的框选截图快捷键
  9. 仿【咪咕动漫】列表下拉刷新上拉加载
  10. Abbexa低样本量鸡溶菌酶 C (LYZ) ELISA 试剂盒
  11. 四年级计算机下册word教学设计,小学教学四年级教案下册计算机教案-20210723143637.docx-原创力文档...
  12. 我用 python 做了款可开淘宝店赚钱的工具!
  13. 【Niagara Vykon N4 】物联网学习 01 Station创建
  14. 音频编码之opus(一)
  15. Linux-Day3笔记
  16. 【论文速递】BLIP:Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and G
  17. FPGA架构与HLS工具
  18. 从0到1构建一个基于知识图谱的智能问答系统
  19. C#做外挂的常用API,本人用了很久,基本没发现问题
  20. DNS正向解析与反向解析

热门文章

  1. 【GNN报告】潘世瑞: 图自监督新范式-重新思考图对比学习
  2. 显卡mx150和230哪个好_显卡mx150和gtx多少相当?
  3. 【转载】Locust实现集合点
  4. 工商银行EBank B2C支付接口v1.0.0.11 开发说明
  5. 字符串 leetcode 总结
  6. 黑盒测试可不只是点点点,这些5种测试工具也必须要会!
  7. mysql函数示例_mysql函数备忘单和示例
  8. 大数据6_03_Kafka命令行操作
  9. win10 WSL NAS搭建Time Machine服务器
  10. 很火的美丽天天秒—链动2+1模式来啦