java根据拼音搜索,但数据库为汉字的解决方案

最近公司有一个需求,需要进行拼音搜索,但是数据库全是中文,如果在在数据库添加拼音字段的话,工作量会特别大,所以我根据网上的大神给的方法,自己做了一个解决方案,给各位同行做个参考,本人菜鸟,欢迎多多指教
1.以下代码是一个文字转拼音的工具类

import org.springframework.stereotype.Component;import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;/*** pinyin4j汉字转拼音工具类* @author zhiheng**/
@Component
public class ChangeToPinYin {//pinyin4j格式类private HanyuPinyinOutputFormat format = null;//拼音字符串数组private String[]pinyin;//通过构造方法进行初始化public ChangeToPinYin(){format = new HanyuPinyinOutputFormat();/** 设置需要转换的拼音格式* 以天为例* HanyuPinyinToneType.WITHOUT_TONE 转换为tian* HanyuPinyinToneType.WITH_TONE_MARK 转换为tian1* HanyuPinyinVCharType.WITH_U_UNICODE 转换为tiān* */format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);pinyin = null;}/*** 对单个字进行转换* @param pinYinStr 需转换的汉字字符串* @return 拼音字符串数组*/public String getCharPinYin(char pinYinStr){try {//执行转换pinyin = PinyinHelper.toHanyuPinyinStringArray(pinYinStr, format);} catch (BadHanyuPinyinOutputFormatCombination e){// TODO Auto-generated catch blocke.printStackTrace();}//pinyin4j规则,当转换的符串不是汉字,就返回nullif(pinyin == null){return null;}//多音字会返回一个多音字拼音的数组,pinyiin4j并不能有效判断该字的读音return pinyin[0];}/*** 对单个字进行转换* @param pinYinStr* @return*/public String getStringPinYin(String pinYinStr){StringBuffer sb = new StringBuffer();String tempStr = null;//循环字符串for(int i = 0; i

2.以下为测试类,
//查询数据库

List list=us.getAll(village);
//new一个汉字转拼音的工具类
ChangeToPinYin changeToPinYin = new ChangeToPinYin();
//创建一个新的集合,来装符合查询的对象
List list1=new ArrayList();
//循环遍历for(int i=0;i

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章