吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3602|回复: 7
收起左侧

[Java 转载] java根据拼音搜索,但数据库为汉字的解决方案

[复制链接]
zhang1212 发表于 2019-10-23 13:48
本帖最后由 苏紫方璇 于 2019-10-23 20:17 编辑

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

[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 block
                e.printStackTrace();
            }
     
            //pinyin4j规则,当转换的符串不是汉字,就返回null
            if(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<pinYinStr.length(); i++)
            {
     
                tempStr = this.getCharPinYin(pinYinStr.charAt(i));
                if(tempStr == null)
                {
                    //非汉字直接拼接
                    sb.append(pinYinStr.charAt(i));
                }
                else
                {
                    sb.append(tempStr);
                }
            }
     
            return sb.toString();
     
        }
    
    }
**2.以下为测试类,**
//查询数据库


        List<User> list=us.getAll(village);
        //new一个汉字转拼音的工具类
        ChangeToPinYin changeToPinYin = new ChangeToPinYin();
        //创建一个新的集合,来装符合查询的对象
        List<User> list1=new ArrayList<User>();
        //循环遍历
         for(int i=0;i<list.size();i++){
                 System.out.println(list.get(i).getName());
                 System.out.println(changeToPinYin.getStringPinYin(list.get(i).getName()));
                 //把汉字转为拼音
                 String p=changeToPinYin.getStringPinYin(list.get(i).getName());
                // boolean res=p.toLowerCase().contains(name.toLowerCase());
                 //查看是否包含所查询的字符串
                 boolean res=p.contains(name);
                 System.out.println(res);
                 //如果包含,
                 if(res==true){
                         //装入新的lsit集合
                         list1.add(list.get(i));
                 }
                 
         }


}



代码结束;


希望帮助到大家

免费评分

参与人数 4吾爱币 +5 热心值 +4 收起 理由
1358582642 + 1 谢谢 @Thanks!
Mr.Lih + 1 + 1 我很赞同!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
烟花易冷xx + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ywel叶子 发表于 2019-10-23 14:19
学到了,谢谢楼主
苏紫方璇 发表于 2019-10-23 20:18
1.shui 发表于 2019-10-29 10:17
 楼主| zhang1212 发表于 2019-10-29 16:03
1.shui 发表于 2019-10-29 10:17
这方法好,我用的是添加拼音字段.

主要是数据库已经好了突然来这个需求,在一个一个写就不现实了
codetimer 发表于 2019-10-30 08:19
nice 啊,感谢分享
siweitang 发表于 2019-10-30 08:57
优秀如你!
共你山今 发表于 2019-11-1 22:26
可以可以,先收藏到时候需要可以用的上。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 15:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表