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());
    }
    }
     
     
  • 相关阅读:
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Navicat查询哪些表有指定字段名
  • 原文地址:https://www.cnblogs.com/htyj/p/7891918.html
Copyright © 2011-2022 走看看