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

    解决场景

      在某些项目需求中我们需要获取姓名或者名称的首字母或者全拼,以用于模糊查询或者字母查询,下面的例子就可以很好的解决这个问题,减少大家的工作量

    所需jar包

    <dependency>
      <groupId>com.belerweb</groupId>
      <artifactId>pinyin4j</artifactId>
      <version>2.5.0</version>
    </dependency>
    
    
    代码
    package com.ccytsoft.wkc.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 kuangxiang
    * @Date 15:06 2017/11/24
    */
    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());
    }
    }
     
     
  • 相关阅读:
    关于订阅号和自定义菜单的关系问题
    微信公众账号支付商户接入指南
    关于微博认证和微信认证
    ACCESS TOKEN
    微信支付可能改变的六大行业
    易信公众平台的微创新:活动消息
    微信公众平台开发(62)股票行情及分析
    七牛云存储官方接口PHP版本
    ckeditor实现WORD粘贴图片自动上传,jsp应用
    CKeditor粘贴图片在IE下自动上传的研究
  • 原文地址:https://www.cnblogs.com/htyj/p/7891918.html
Copyright © 2011-2022 走看看