最近接到需求,要求商城中进行半模糊搜索时,输入拼音字母同样要求进行自动匹配出相关品牌、类目、关键词等数据,从而进行筛选商品
本片内容只记录汉字转换拼音
方案一:在mysql数据库中编写函数,此方法存在两个弊端
弊端1. 现在很多公司编码设计规范中不允许使用函数、存储过程、视图等,在现在的互联网时代经常会因为项目的需要进行分库分表或数据库迁移拆分等,使用这些容易出现问题,且存储过程等难以追查和维护
弊端2. 在数据库中存在很多意想不到的字符,只凭借函数过滤会造成大量代码的编写,难度过高,本人在此次任务需求中在处理历史数据时首先使用的就是编写函数的方式进行更新,在生成品牌名称拼音的过程中就遇到了这个问题,其中包括但不限于希腊字母、越南字母。
方案二:在java中拼音转换方法如下
mavn项目pom文件中引入包

<dependency><groupId>org.iherus</groupId><artifactId>qrext4j</artifactId><version>1.3.1</version>
</dependency>
<dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version>
</dependency>

代码部分

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;public class PinyinUtils {/*** 将汉字转换为全拼* @param src* @return String*/public static String getPinYin(String src) {char[] t1 = null;t1 = src.toCharArray();String[] t2 = new String[t1.length];// 设置汉字拼音输出的格式HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);//小写t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);//不带音标t3.setVCharType(HanyuPinyinVCharType.WITH_V);String t4 = "";int t0 = t1.length;try {for (int i = 0; i < t0; i++) {// 判断是否为汉字字符if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中if (t2 != null){//此处添加判断,因为个别汉字转换拼音时出现异常,转换失败t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后}else{throw new BusinessException("转换拼音异常汉字:"+t1[i]);}} else {// 如果不是汉字字符,直接取出字符并连接到字符串t4后t4 += Character.toString(t1[i]);}}} catch (BadHanyuPinyinOutputFormatCombination e) {// TODO Auto-generated catch blocke.printStackTrace();}return t4;}/*** 提取每个汉字的首字母** @param str* @return String*/public static String getPinYinHeadChar(String str) {String convert = "";for (int j = 0; j < str.length(); j++) {char word = str.charAt(j);// 提取汉字的首字母String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);if (pinyinArray != null) {convert += pinyinArray[0].charAt(0);} else {convert += word;}}return convert;}/*** 将字符串转换成ASCII码** @param cnStr* @return String*/public static String getCnASCII(String cnStr) {StringBuffer strBuf = new StringBuffer();// 将字符串转换成字节序列byte[] bGBK = cnStr.getBytes();for (int i = 0; i < bGBK.length; i++) {// 将每个字符转换成ASCII码strBuf.append(Integer.toHexString(bGBK[i] & 0xff) + " ");}return strBuf.toString();}
}

根据自己的需要进行方法的选择即可
注意:个别汉字转换时,出现异常,PinyinHelper.toHanyuPinyinStringArray() 方法返回Array reference expected,本文在此处处理时是对不能转换为拼音的汉字给与提示,以免影响后续查询精度,读者可根据自己的需要进行提示、直接抛出异常、过滤忽略。汉字不能正常转换的在本次任务中发现两个: 婔、嚒

java 汉字转换全拼、首字母拼音相关推荐

  1. mysql root dengru_Mysql学习Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    <Mysql学习Mysql中文汉字转拼音的实现(每个汉字转换全拼)>要点: 本文介绍了Mysql学习Mysql中文汉字转拼音的实现(每个汉字转换全拼),希望对您有用.如果有疑问,可以联系我 ...

  2. java 汉字转拼音工具_【转载】Java汉字转全拼工具

    个人在使用过程发现了几个问题需要注意: 1.本类使用了Pinyin4j开源库.点击下载 2.Pinyin4j本身是支持多音字的,但这胸弟貌似处理掉了,"长沙"会返回"zh ...

  3. 汉字转拼音/全拼/首字母

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Pinyin4j 简介 二.使用步骤 1.引入依赖 2.具体实现 总结 前言 项目中需要通过组织名称获取对应的简拼 ...

  4. java汉字获取全拼、首字母

    1.pom中引入包 <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j< ...

  5. ORACLE根据汉字获取拼音码:首字母/全拼/首字母截取

    create or replace package  GetHZPY is --oracle汉字转拼音 PACKAGE     --1.获得全拼  www.2cto.com   --SELECT GE ...

  6. mysql中的汉字怎么转换_Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    一.创建拼音对照表 代码如下: -- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yin_` varchar(255) ...

  7. sql文字转换全拼_Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    一.创建拼音对照表 -- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yin_` varchar(255) CHARAC ...

  8. centos mysql lujin_Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    一.创建拼音对照表 -- 创建汉字拼音对照临时表 create table if not exists `t_base_pinyin` ( `pin_yin_` varchar(255) charac ...

  9. mysql 拼音转汉字_Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    -- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yin_` varchar(255) CHARACTER SET gb ...

最新文章

  1. Janusec应用安全网关(WAF网关)
  2. 在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
  3. java Hashtable的遍历方法
  4. HTML5 新增结构元素分为主体结构元素和非主体结构元素
  5. JavaScript 第二课 JavaScript语法
  6. 类的继承 设计模式
  7. outermost shell_outermost是什么意思_outermost怎么读_outermost翻译_用法_发音_词组_同反义词_最外面的_离中心最远的-新东方在线英语词典...
  8. ssh相互访问不用密码
  9. 【leetcode】91. Decode Ways A-Z的字母表示1-26的数字,反向破解多少种字符串的可能性...
  10. css制作类似优惠券的卡片样式(vue)
  11. 解决中文乱码问题的代码
  12. 使用树莓派打造家庭监控系统
  13. JavaScript框架的四个时代
  14. 常用单片机模块(一)
  15. 第四章 智能合约 [20]
  16. VMware安装优麒麟20.04LTS
  17. B站下载姿势合集——亲测
  18. 分支分歧(branch divergence)造成SIMT性能降低的原因
  19. php 爬取新闻,scrapy抓取学院新闻报告
  20. 断电的方法关闭计算机,win7设置usb关机断电|win7设置usb关机拔出断电的解决方法...

热门文章

  1. 广告归因:是什么和为什么
  2. 【人话版】摸着WEB3过河的互联网风景线
  3. Redis 的特点及命令大全
  4. python 中的File
  5. 【优化布局】matlab基于禁忌搜索算法求解基站选址问题代码
  6. C专家编程(5-6)
  7. 群晖NAS搭建WebDav服务,并内网穿透实现公网访问
  8. 动态规划——1265:【例9.9】最长公共子序列
  9. 微型断路器的选择使用
  10. 吴国忠先生谈郑曼青太极拳之思路