576bf215f5e009b68284eabae47b4e955b13c55a.svn-base 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package com.yihu.platform.utils;
  2. import net.sourceforge.pinyin4j.PinyinHelper;
  3. import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
  4. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  5. import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  6. import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
  7. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
  8. /*******************************************************************************
  9. * pinyin4j is a plug-in, you can kind of Chinese characters into phonetic.Multi-tone character,Tone Detailed view http://pinyin4j.sourceforge.net/
  10. *
  11. * @author Administrator
  12. * @ClassName: Pinyin4jUtil
  13. * @Description: TODO
  14. * @author wang_china@foxmail.com
  15. * @date Jan 13, 2012 9:28:28 AM
  16. */
  17. public class Pinyin4jUtil {
  18. /***************************************************************************
  19. * 获取中文汉字拼音 默认输出
  20. *
  21. * @Name: Pinyin4jUtil.java
  22. * @Description: TODO
  23. * @author: wang_chian@foxmail.com
  24. * @version: Jan 13, 2012 9:34:11 AM
  25. * @param chinese
  26. * 中文汉字
  27. * @throws BadHanyuPinyinOutputFormatCombination
  28. */
  29. public static String getPinyin(String chinese) {
  30. char[] chars = chinese.toCharArray();
  31. if (chinese != null && !chinese.trim().equalsIgnoreCase("")) {
  32. char[] srcChar = chinese.toCharArray();
  33. String[][] temp = new String[chinese.length()][];
  34. for (int i = 0; i < srcChar.length; i++) {
  35. char c = srcChar[i];
  36. // 是中文或者a-z或者A-Z转换拼音
  37. if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) {
  38. try {
  39. temp[i] = PinyinHelper.toHanyuPinyinStringArray(chars[i], getDefaultOutputFormat());
  40. } catch (Exception e) {
  41. e.printStackTrace();
  42. }
  43. } else { //否则则保持原样
  44. temp[i] = new String[] { String.valueOf(srcChar[i]) };
  45. }
  46. }
  47. String[] pingyinArray = Exchange(temp);
  48. if(pingyinArray != null && pingyinArray.length > 0){
  49. return pingyinArray[0];
  50. }
  51. }
  52. return null;
  53. }
  54. /***************************************************************************
  55. * Default Format 默认输出格式
  56. *
  57. * @Name: Pinyin4jUtil.java
  58. * @Description: TODO
  59. * @author: wang_chian@foxmail.com
  60. * @version: Jan 13, 2012 9:35:51 AM
  61. * @return
  62. */
  63. public static HanyuPinyinOutputFormat getDefaultOutputFormat() {
  64. HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
  65. format.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 小写
  66. format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 没有音调数字
  67. format.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);// u显示
  68. return format;
  69. }
  70. /***************************************************************************
  71. *
  72. * @Name: Pinyin4jUtil.java
  73. * @Description: TODO
  74. * @author: wang_chian@foxmail.com
  75. * @version: Jan 13, 2012 9:39:54 AM
  76. * @param strJaggedArray
  77. * @return
  78. */
  79. public static String[] Exchange(String[][] strJaggedArray) {
  80. String[][] temp = DoExchange(strJaggedArray);
  81. return temp[0];
  82. }
  83. /***************************************************************************
  84. *
  85. * @Name: Pinyin4jUtil.java
  86. * @Description: TODO
  87. * @author: wang_chian@foxmail.com
  88. * @version: Jan 13, 2012 9:39:47 AM
  89. * @param strJaggedArray
  90. * @return
  91. */
  92. private static String[][] DoExchange(String[][] strJaggedArray) {
  93. int len = strJaggedArray.length;
  94. if (len >= 2) {
  95. int len1 = strJaggedArray[0].length;
  96. int len2 = strJaggedArray[1].length;
  97. int newlen = len1 * len2;
  98. String[] temp = new String[newlen];
  99. int Index = 0;
  100. for (int i = 0; i < len1; i++) {
  101. for (int j = 0; j < len2; j++) {
  102. temp[Index] = capitalize(strJaggedArray[0][i]) + capitalize(strJaggedArray[1][j]);
  103. //temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j];
  104. Index++;
  105. }
  106. }
  107. String[][] newArray = new String[len - 1][];
  108. for (int i = 2; i < len; i++) {
  109. newArray[i - 1] = strJaggedArray[i];
  110. }
  111. newArray[0] = temp;
  112. return DoExchange(newArray);
  113. } else {
  114. return strJaggedArray;
  115. }
  116. }
  117. /***************************************************************************
  118. * 首字母大写
  119. *
  120. * @Name: Pinyin4jUtil.java
  121. * @Description: TODO
  122. * @author: wang_chian@foxmail.com
  123. * @version: Jan 13, 2012 9:36:18 AM
  124. * @param s
  125. * @return
  126. */
  127. public static String capitalize(String s) {
  128. char ch[];
  129. ch = s.toCharArray();
  130. if (ch[0] >= 'a' && ch[0] <= 'z') {
  131. ch[0] = (char) (ch[0] - 32);
  132. }
  133. String newString = new String(ch);
  134. return newString;
  135. }
  136. /**
  137. * 获取汉字首字母
  138. * @param str
  139. * @return
  140. */
  141. public static String getPinYinHeadChar(String str) {
  142. if (StringUtil.isEmpty(str)) {
  143. return "";
  144. }
  145. str = str.replaceAll("厦门","xm").replaceAll("重庆", "cq").replaceAll("长沙", "cs").replaceAll("长春", "cc");
  146. String convert = "";
  147. for (int j = 0; j < str.length(); j++) {
  148. char word = str.charAt(j);
  149. // 提取汉字的首字母
  150. String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
  151. if (pinyinArray != null) {
  152. convert += pinyinArray[0].charAt(0);
  153. }
  154. else {
  155. convert += word;
  156. }
  157. }
  158. convert = string2AllTrim(convert);
  159. return convert.toLowerCase();
  160. }
  161. /**
  162. * 去掉字符串包含的所有空格
  163. *
  164. * @param value
  165. * @return
  166. */
  167. public static String string2AllTrim(String value) {
  168. if (StringUtil.isEmpty(value)) {
  169. return "";
  170. }
  171. return value.trim().replace(" ", "");
  172. }
  173. /***************************************************************************
  174. * Test
  175. *
  176. * @Name: Pinyin4jUtil.java
  177. * @Description: TODO
  178. * @author: wang_chian@foxmail.com
  179. * @version: Jan 13, 2012 9:49:27 AM
  180. * @param args
  181. * @throws BadHanyuPinyinOutputFormatCombination
  182. */
  183. public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {
  184. String str = "张三覃矶澊左1@";
  185. System.out.println("小写输出:" + getPinyin(str));
  186. }
  187. }