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