Pinyin4j

java汉字转拼音操作工具类

Java代码 复制代码 收藏代码
  1. import net.sourceforge.pinyin4j.PinyinHelper;
  2. import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
  3. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  4. import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  5. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
  6. /**
  7. * java汉字转拼音操作工具类
  8. * @author admin
  9. */
  10. public class PinyinUtil {
  11. /**
  12. * 将字符串转换成拼音数组
  13. * @param src
  14. * @return
  15. */
  16. public String[] stringToPinyin(String src, String separator) {
  17. return stringToPinyin(src, true, separator);
  18. }
  19. /**
  20. * 将字符串转换成拼音数组
  21. * @param src
  22. * @param isPolyphone
  23. * 是否查出多音字的所有拼音
  24. * @param separator
  25. * 多音字拼音之间的分隔符
  26. * @return
  27. */
  28. public String[] stringToPinyin(String src, boolean isPolyphone, String separator) {
  29. // 判断字符串是否为空
  30. if ("".equals(src) || null == src) {
  31. return null;
  32. }
  33. char[] srcChar = src.toCharArray();
  34. int srcCount = srcChar.length;
  35. String[] srcStr = new String[srcCount];
  36. for (int i = 0; i < srcCount; i++) {
  37. srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);
  38. }
  39. return srcStr;
  40. }
  41. /**
  42. * 将单个字符转换成拼音
  43. * @param src
  44. * @return
  45. */
  46. public String charToPinyin(char src, boolean isPolyphone, String separator) {
  47. // 创建汉语拼音处理类
  48. HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
  49. // 输出设置,大小写,音标方式
  50. defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  51. defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  52. StringBuffer tempPinying = new StringBuffer();
  53. // 如果是中文
  54. if (src > 128) {
  55. try {
  56. // 转换得出结果
  57. String[] strs = PinyinHelper.toHanyuPinyinStringArray(src, defaultFormat);
  58. // 是否查出多音字,默认是查出多音字的第一个字符
  59. if (isPolyphone && null != separator) {
  60. for (int i = 0; i < strs.length; i++) {
  61. tempPinying.append(strs[i]);
  62. if (strs.length != (i + 1)) {
  63. // 多音字之间用特殊符号间隔起来
  64. tempPinying.append(separator);
  65. }
  66. }
  67. }
  68. else {
  69. tempPinying.append(strs[0]);
  70. }
  71. } catch (BadHanyuPinyinOutputFormatCombination e) {
  72. e.printStackTrace();
  73. }
  74. }
  75. else {
  76. tempPinying.append(src);
  77. }
  78. return tempPinying.toString();
  79. }
  80. /**
  81. * 将汉字转换成拼音
  82. * @param hanzi
  83. * @param separator
  84. * @return
  85. */
  86. @SuppressWarnings("deprecation")
  87. public String hanziToPinyin(String hanzi, String separator) {
  88. // 创建汉语拼音处理类
  89. HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
  90. // 输出设置,大小写,音标方式
  91. defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  92. defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  93. String pinyingStr = "";
  94. try {
  95. pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat, separator);
  96. } catch (BadHanyuPinyinOutputFormatCombination e) {
  97. e.printStackTrace();
  98. }
  99. return pinyingStr;
  100. }
  101. /**
  102. * 将字符串数组转换成字符串
  103. * @param str
  104. * @param separator
  105. * 各个字符串之间的分隔符
  106. * @return
  107. */
  108. public String stringArrayToString(String[] str, String separator) {
  109. StringBuffer sb = new StringBuffer();
  110. for (int i = 0; i < str.length; i++) {
  111. sb.append(str[i]);
  112. if (str.length != (i + 1)) {
  113. sb.append(separator);
  114. }
  115. }
  116. return sb.toString();
  117. }
  118. /**
  119. * 将字符数组转换成字符串
  120. * @param str
  121. * @param separator
  122. * 各个字符串之间的分隔符
  123. * @return
  124. */
  125. public String charArrayToString(char[] ch, String separator) {
  126. StringBuffer sb = new StringBuffer();
  127. for (int i = 0; i < ch.length; i++) {
  128. sb.append(ch[i]);
  129. if (ch.length != (i + 1)) {
  130. sb.append(separator);
  131. }
  132. }
  133. return sb.toString();
  134. }
  135. /**
  136. * 取汉字的首字母
  137. * @param src
  138. * @param isCapital
  139. * 是否是大写
  140. * @return
  141. */
  142. public char[] getHeadByChar(char src, boolean isCapital) {
  143. // 如果不是汉字直接返回
  144. if (src <= 128) {
  145. return new char[] { src };
  146. }
  147. // 获取所有的拼音
  148. String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src);
  149. // 创建返回对象
  150. int polyphoneSize = pinyingStr.length;
  151. char[] headChars = new char[polyphoneSize];
  152. int i = 0;
  153. // 截取首字符
  154. for (String s : pinyingStr) {
  155. char headChar = s.charAt(0);
  156. // 首字母是否大写,默认是小写
  157. if (isCapital) {
  158. headChars[i] = Character.toUpperCase(headChar);
  159. }
  160. else {
  161. headChars[i] = headChar;
  162. }
  163. i++;
  164. }
  165. return headChars;
  166. }
  167. /**
  168. * 查找字符串首字母
  169. * @param src
  170. * @param isCapital
  171. * 是否大写
  172. * @return
  173. */
  174. public String[] getHeadByString(String src, boolean isCapital) {
  175. return getHeadByString(src, isCapital, null);
  176. }
  177. /**
  178. * 查找字符串首字母
  179. * @param src
  180. * @param isCapital
  181. * 是否大写
  182. * @param separator
  183. * 分隔符
  184. * @return
  185. */
  186. public String[] getHeadByString(String src, boolean isCapital, String separator) {
  187. char[] chars = src.toCharArray();
  188. String[] headString = new String[chars.length];
  189. int i = 0;
  190. for (char ch : chars) {
  191. char[] chs = getHeadByChar(ch, isCapital);
  192. StringBuffer sb = new StringBuffer();
  193. if (null != separator) {
  194. int j = 1;
  195. for (char ch1 : chs) {
  196. sb.append(ch1);
  197. if (j != chs.length) {
  198. sb.append(separator);
  199. }
  200. j++;
  201. }
  202. }
  203. else {
  204. sb.append(chs[0]);
  205. }
  206. headString[i] = sb.toString();
  207. i++;
  208. }
  209. return headString;
  210. }
  211. }
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * java汉字转拼音操作工具类
 * @author admin
 */
public class PinyinUtil {

	/**
	 * 将字符串转换成拼音数组
	 * @param src
	 * @return
	 */
	public String[] stringToPinyin(String src, String separator) {

		return stringToPinyin(src, true, separator);

	}

	/**
	 * 将字符串转换成拼音数组
	 * @param src
	 * @param isPolyphone
	 *            是否查出多音字的所有拼音
	 * @param separator
	 *            多音字拼音之间的分隔符
	 * @return
	 */
	public String[] stringToPinyin(String src, boolean isPolyphone, String separator) {

		// 判断字符串是否为空
		if ("".equals(src) || null == src) {

			return null;

		}

		char[] srcChar = src.toCharArray();

		int srcCount = srcChar.length;

		String[] srcStr = new String[srcCount];

		for (int i = 0; i < srcCount; i++) {

			srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);

		}

		return srcStr;
	}

	/**
	 * 将单个字符转换成拼音
	 * @param src
	 * @return
	 */
	public String charToPinyin(char src, boolean isPolyphone, String separator) {

		// 创建汉语拼音处理类
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();

		// 输出设置,大小写,音标方式
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

		StringBuffer tempPinying = new StringBuffer();

		// 如果是中文
		if (src > 128) {

			try {

				// 转换得出结果
				String[] strs = PinyinHelper.toHanyuPinyinStringArray(src, defaultFormat);

				// 是否查出多音字,默认是查出多音字的第一个字符
				if (isPolyphone && null != separator) {
					
					for (int i = 0; i < strs.length; i++) {
						
						tempPinying.append(strs[i]);
						
						if (strs.length != (i + 1)) {
							
							// 多音字之间用特殊符号间隔起来
							tempPinying.append(separator);
							
						}
						
					}
					
				}
				
				else {
					
					tempPinying.append(strs[0]);
					
				}

			} catch (BadHanyuPinyinOutputFormatCombination e) {
				
				e.printStackTrace();
				
			}
			
		}
		
		else {
			
			tempPinying.append(src);
			
		}

		return tempPinying.toString();

	}

	/**
	 * 将汉字转换成拼音
	 * @param hanzi
	 * @param separator
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public String hanziToPinyin(String hanzi, String separator) {

		// 创建汉语拼音处理类
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		
		// 输出设置,大小写,音标方式
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

		String pinyingStr = "";
		
		try {
			
			pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat, separator);
			
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			
			e.printStackTrace();
			
		}
		
		return pinyingStr;
		
	}

	/**
	 * 将字符串数组转换成字符串
	 * @param str
	 * @param separator
	 *            各个字符串之间的分隔符
	 * @return
	 */
	public String stringArrayToString(String[] str, String separator) {

		StringBuffer sb = new StringBuffer();
		
		for (int i = 0; i < str.length; i++) {
			
			sb.append(str[i]);
			
			if (str.length != (i + 1)) {
				
				sb.append(separator);
				
			}
			
		}
		
		return sb.toString();
	}

	/**
	 * 将字符数组转换成字符串
	 * @param str
	 * @param separator
	 *            各个字符串之间的分隔符
	 * @return
	 */
	public String charArrayToString(char[] ch, String separator) {

		StringBuffer sb = new StringBuffer();
		
		for (int i = 0; i < ch.length; i++) {
			
			sb.append(ch[i]);
			
			if (ch.length != (i + 1)) {
				
				sb.append(separator);
				
			}
			
		}
		
		return sb.toString();
	}

	/**
	 * 取汉字的首字母
	 * @param src
	 * @param isCapital
	 *            是否是大写
	 * @return
	 */
	public char[] getHeadByChar(char src, boolean isCapital) {

		// 如果不是汉字直接返回
		if (src <= 128) {
			
			return new char[] { src };
			
		}
		// 获取所有的拼音
		String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src);
		
		// 创建返回对象
		int polyphoneSize = pinyingStr.length;
		
		char[] headChars = new char[polyphoneSize];
		
		int i = 0;
		
		// 截取首字符
		for (String s : pinyingStr) {
			
			char headChar = s.charAt(0);
			
			// 首字母是否大写,默认是小写
			if (isCapital) {
				
				headChars[i] = Character.toUpperCase(headChar);
				
			}
			
			else {
				
				headChars[i] = headChar;
				
			}
			
			i++;
			
		}

		return headChars;
	}

	/**
	 * 查找字符串首字母
	 * @param src
	 * @param isCapital
	 *            是否大写
	 * @return
	 */
	public String[] getHeadByString(String src, boolean isCapital) {

		return getHeadByString(src, isCapital, null);
	}

	/**
	 * 查找字符串首字母
	 * @param src
	 * @param isCapital
	 *            是否大写
	 * @param separator
	 *            分隔符
	 * @return
	 */
	public String[] getHeadByString(String src, boolean isCapital, String separator) {

		char[] chars = src.toCharArray();
		
		String[] headString = new String[chars.length];
		
		int i = 0;
		
		for (char ch : chars) {

			char[] chs = getHeadByChar(ch, isCapital);
			
			StringBuffer sb = new StringBuffer();
			
			if (null != separator) {
				
				int j = 1;

				for (char ch1 : chs) {
					
					sb.append(ch1);
					
					if (j != chs.length) {
						
						sb.append(separator);
						
					}
					
					j++;
					
				}
				
			}
			
			else {
				
				sb.append(chs[0]);
				
			}
			
			headString[i] = sb.toString();
			
			i++;
		}
		
		return headString;
	}
}

你可以这么用:

Java代码 复制代码 收藏代码
  1. PinyinUtil putil = new PinyinUtil();
  2. String[] result = putil.getHeadByString("拼音工具类", true);
  3. StringBuffer sb = new StringBuffer();
  4. for (String str : result) {
  5. sb.append(str);
  6. }
  7. System.out.println(sb.toString());
PinyinUtil putil = new PinyinUtil();
String[] result = putil.getHeadByString("拼音工具类", true);
StringBuffer sb = new StringBuffer();
 for (String str : result) {
	sb.append(str);
}
System.out.println(sb.toString());

附件是Pinyin4j-2.5.0.jar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值