zoukankan      html  css  js  c++  java
  • pinyin4j工具类

        <!-- 导入pinyin4j -->
            <dependency>
                <groupId>com.belerweb</groupId>
                <artifactId>pinyin4j</artifactId>
                <version>2.5.0</version>
            </dependency>            

      
    PinYin4jUtils 工具类

    1
    package cn.itcast.bos.utils; 2 3 import java.util.Arrays; 4 5 import net.sourceforge.pinyin4j.PinyinHelper; 6 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; 7 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; 8 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; 9 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; 10 11 public class PinYin4jUtils { 12 /** 13 * 将字符串转换成拼音数组 14 * 15 * @param src 16 * @return 17 */ 18 public static String[] stringToPinyin(String src) { 19 return stringToPinyin(src, false, null); 20 } 21 22 /** 23 * 将字符串转换成拼音数组 24 * 25 * @param src 26 * @return 27 */ 28 public static String[] stringToPinyin(String src, String separator) { 29 30 return stringToPinyin(src, true, separator); 31 } 32 33 /** 34 * 将字符串转换成拼音数组 35 * 36 * @param src 37 * @param isPolyphone 38 * 是否查出多音字的所有拼音 39 * @param separator 40 * 多音字拼音之间的分隔符 41 * @return 42 */ 43 public static String[] stringToPinyin(String src, boolean isPolyphone, 44 String separator) { 45 // 判断字符串是否为空 46 if ("".equals(src) || null == src) { 47 return null; 48 } 49 char[] srcChar = src.toCharArray(); 50 int srcCount = srcChar.length; 51 String[] srcStr = new String[srcCount]; 52 53 for (int i = 0; i < srcCount; i++) { 54 srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator); 55 } 56 return srcStr; 57 } 58 59 /** 60 * 将单个字符转换成拼音 61 * 62 * @param src 63 * @return 64 */ 65 public static String charToPinyin(char src, boolean isPolyphone, 66 String separator) { 67 // 创建汉语拼音处理类 68 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); 69 // 输出设置,大小写,音标方式 70 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); 71 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 72 73 StringBuffer tempPinying = new StringBuffer(); 74 75 // 如果是中文 76 if (src > 128) { 77 try { 78 // 转换得出结果 79 String[] strs = PinyinHelper.toHanyuPinyinStringArray(src, 80 defaultFormat); 81 82 // 是否查出多音字,默认是查出多音字的第一个字符 83 if (isPolyphone && null != separator) { 84 for (int i = 0; i < strs.length; i++) { 85 tempPinying.append(strs[i]); 86 if (strs.length != (i + 1)) { 87 // 多音字之间用特殊符号间隔起来 88 tempPinying.append(separator); 89 } 90 } 91 } else { 92 tempPinying.append(strs[0]); 93 } 94 95 } catch (BadHanyuPinyinOutputFormatCombination e) { 96 e.printStackTrace(); 97 } 98 } else { 99 tempPinying.append(src); 100 } 101 102 return tempPinying.toString(); 103 104 } 105 106 public static String hanziToPinyin(String hanzi) { 107 return hanziToPinyin(hanzi, " "); 108 } 109 110 /** 111 * 将汉字转换成拼音 112 * 113 * @param hanzi 114 * @param separator 115 * @return 116 */ 117 public static String hanziToPinyin(String hanzi, String separator) { 118 119 // 创建汉语拼音处理类 120 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); 121 // 输出设置,大小写,音标方式 122 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); 123 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 124 125 String pinyingStr = ""; 126 try { 127 pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat, 128 separator); 129 } catch (BadHanyuPinyinOutputFormatCombination e) { 130 // TODO Auto-generated catch block 131 e.printStackTrace(); 132 } 133 return pinyingStr; 134 } 135 136 /** 137 * 将字符串数组转换成字符串 138 * 139 * @param str 140 * @param separator 141 * 各个字符串之间的分隔符 142 * @return 143 */ 144 public static String stringArrayToString(String[] str, String separator) { 145 StringBuffer sb = new StringBuffer(); 146 for (int i = 0; i < str.length; i++) { 147 sb.append(str[i]); 148 if (str.length != (i + 1)) { 149 sb.append(separator); 150 } 151 } 152 return sb.toString(); 153 } 154 155 /** 156 * 简单的将各个字符数组之间连接起来 157 * 158 * @param str 159 * @return 160 */ 161 public static String stringArrayToString(String[] str) { 162 return stringArrayToString(str, ""); 163 } 164 165 /** 166 * 将字符数组转换成字符串 167 * 168 * @param str 169 * @param separator 170 * 各个字符串之间的分隔符 171 * @return 172 */ 173 public static String charArrayToString(char[] ch, String separator) { 174 StringBuffer sb = new StringBuffer(); 175 for (int i = 0; i < ch.length; i++) { 176 sb.append(ch[i]); 177 if (ch.length != (i + 1)) { 178 sb.append(separator); 179 } 180 } 181 return sb.toString(); 182 } 183 184 /** 185 * 将字符数组转换成字符串 186 * 187 * @param str 188 * @return 189 */ 190 public static String charArrayToString(char[] ch) { 191 return charArrayToString(ch, " "); 192 } 193 194 /** 195 * 取汉字的首字母 196 * 197 * @param src 198 * @param isCapital 199 * 是否是大写 200 * @return 201 */ 202 public static char[] getHeadByChar(char src, boolean isCapital) { 203 // 如果不是汉字直接返回 204 if (src <= 128) { 205 return new char[] { src }; 206 } 207 // 获取所有的拼音 208 String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src); 209 210 // 创建返回对象 211 int polyphoneSize = pinyingStr.length; 212 char[] headChars = new char[polyphoneSize]; 213 int i = 0; 214 // 截取首字符 215 for (String s : pinyingStr) { 216 char headChar = s.charAt(0); 217 // 首字母是否大写,默认是小写 218 if (isCapital) { 219 headChars[i] = Character.toUpperCase(headChar); 220 } else { 221 headChars[i] = headChar; 222 } 223 i++; 224 } 225 226 return headChars; 227 } 228 229 /** 230 * 取汉字的首字母(默认是大写) 231 * 232 * @param src 233 * @return 234 */ 235 public static char[] getHeadByChar(char src) { 236 return getHeadByChar(src, true); 237 } 238 239 /** 240 * 查找字符串首字母 241 * 242 * @param src 243 * @return 244 */ 245 public static String[] getHeadByString(String src) { 246 return getHeadByString(src, true); 247 } 248 249 /** 250 * 查找字符串首字母 251 * 252 * @param src 253 * @param isCapital 254 * 是否大写 255 * @return 256 */ 257 public static String[] getHeadByString(String src, boolean isCapital) { 258 return getHeadByString(src, isCapital, null); 259 } 260 261 /** 262 * 查找字符串首字母 263 * 264 * @param src 265 * @param isCapital 266 * 是否大写 267 * @param separator 268 * 分隔符 269 * @return 270 */ 271 public static String[] getHeadByString(String src, boolean isCapital, 272 String separator) { 273 char[] chars = src.toCharArray(); 274 String[] headString = new String[chars.length]; 275 int i = 0; 276 for (char ch : chars) { 277 278 char[] chs = getHeadByChar(ch, isCapital); 279 StringBuffer sb = new StringBuffer(); 280 if (null != separator) { 281 int j = 1; 282 283 for (char ch1 : chs) { 284 sb.append(ch1); 285 if (j != chs.length) { 286 sb.append(separator); 287 } 288 j++; 289 } 290 } else { 291 sb.append(chs[0]); 292 } 293 headString[i] = sb.toString(); 294 i++; 295 } 296 return headString; 297 } 298 299 public static void main(String[] args) { 300 // pin4j 简码 和 城市编码 301 String s1 = "中华人民共和国"; 302 String[] headArray = getHeadByString(s1); // 获得每个汉字拼音首字母 303 System.out.println(Arrays.toString(headArray)); 304 305 String s2 = "长城"; 306 System.out.println(Arrays.toString(stringToPinyin(s2, true, ","))); 307 308 } 309 }
  • 相关阅读:
    Java 的this和super关键字
    Java关于访问控制权限
    Java 封装 继承 多态
    Java的集成开发工具
    如何查询小程序中的代码量
    小程序中使用echarts及使用的坑
    微信小程序-新的页面授权机制
    前端处理几十万条数据不卡顿(window.requestAnimationFrame)
    Vs code中Eslint 与 Prettier格式化冲突
    从原型与原型链的角度看es6 class
  • 原文地址:https://www.cnblogs.com/wwwzzz/p/8032599.html
Copyright © 2011-2022 走看看