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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM