zoukankan      html  css  js  c++  java
  • java汉字获取首字母

    前言

    在项目中很多时候我们需要获取姓名或者名称的首字母或者全拼,以用于模糊查询或者字母查询,在这里分享一个实例;供小伙伴们参考。

    导入jar包

    <dependency>
      <groupId>com.belerweb</groupId>
      <artifactId>pinyin4j</artifactId>
      <version>2.5.0</version>
    </dependency>
    

    代码

    
    package com.xxxx.util;
    
    import net.sourceforge.pinyin4j.PinyinHelper;
    import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
    import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * 获取首字母工具
     *
     * @author 
     * @Date 
     */
    public class ChineseCharacterUtil {
    
        /**
         *  获取汉字首字母或全拼大写字母
         *
         * @param chinese 汉字
         * @param isFull  是否全拼 true:表示全拼 false表示:首字母
         *
         * @return 全拼或者首字母大写字符窜
         */
        public static String getUpperCase(String chinese,boolean isFull){
            return convertHanzi2Pinyin(chinese,isFull).toUpperCase();
        }
    
        /**
         * 获取汉字首字母或全拼小写字母
         *
         * @param chinese 汉字
         * @param isFull 是否全拼 true:表示全拼 false表示:首字母
         *
         * @return 全拼或者首字母小写字符窜
         */
        public static  String getLowerCase(String chinese,boolean isFull){
            return convertHanzi2Pinyin(chinese,isFull).toLowerCase();
        }
    
        /**
         * 将汉字转成拼音
         * <P>
         * 取首字母或全拼
         *
         * @param hanzi 汉字字符串
         * @param isFull 是否全拼 true:表示全拼 false表示:首字母
         *
         * @return 拼音
         */
        private static String convertHanzi2Pinyin(String hanzi,boolean isFull){
            /***
             * ^[u2E80-u9FFF]+$ 匹配所有东亚区的语言
             * ^[u4E00-u9FFF]+$ 匹配简体和繁体
             * ^[u4E00-u9FA5]+$ 匹配简体
             */
            String regExp="^[u4E00-u9FFF]+$";
            StringBuffer sb=new StringBuffer();
            if(hanzi==null||"".equals(hanzi.trim())){
                return "";
            }
            String pinyin="";
            for(int i=0;i<hanzi.length();i++){
                char unit=hanzi.charAt(i);
                //是汉字,则转拼音
                if(match(String.valueOf(unit),regExp)){
                    pinyin=convertSingleHanzi2Pinyin(unit);
                    if(isFull){
                        sb.append(pinyin);
                    }
                    else{
                        sb.append(pinyin.charAt(0));
                    }
                }else{
                    sb.append(unit);
                }
            }
            return sb.toString();
        }
    
        /**
         * 将单个汉字转成拼音
         *
         * @param hanzi 汉字字符
         *
         * @return 拼音
         */
        private static String convertSingleHanzi2Pinyin(char hanzi){
            HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
            outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            String[] res;
            StringBuffer sb=new StringBuffer();
            try {
                res = PinyinHelper.toHanyuPinyinStringArray(hanzi,outputFormat);
                sb.append(res[0]);//对于多音字,只用第一个拼音
            } catch (Exception e) {
                e.printStackTrace();
                return "";
            }
            return sb.toString();
        }
    
        /***
         * 匹配
         * <P>
         * 根据字符和正则表达式进行匹配
         *
         * @param str 源字符串
         * @param regex 正则表达式
         *
         * @return true:匹配成功  false:匹配失败
         */
        private static boolean match(String str,String regex){
            Pattern pattern=Pattern.compile(regex);
            Matcher matcher=pattern.matcher(str);
            return matcher.find();
        }
    
        /**
         * 测试方法
         */
        public static void main(String[] args) {
            System.out.println(convertHanzi2Pinyin("弗格森的广东省",false).toUpperCase());
        }
    }
    
    
  • 相关阅读:
    jquery获取select选中的文本值
    Nginx实战入门教程
    【分享】Jenkins自动化部署全套视频教程
    Jenkins自动化部署入门详细教程
    【分享】nginx负载均衡全套视频教程
    IT从业者疫情之下出路何在
    jmeter控制器(四)
    jmeter控制器(三)
    复述记忆法的初步学习总结
    raspberry-gpio-python(树莓派GPIO与Python编程)
  • 原文地址:https://www.cnblogs.com/nikeodong/p/8214593.html
Copyright © 2011-2022 走看看