方法一:
import net.sourceforge.pinyin4j.PinyinHelper; |
02 | import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; |
03 | import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; |
04 | import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; |
05 | import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; |
06 |
07 | public class SpellHelper { |
08 | //将中文转换为英文 |
09 | public static String getEname(String name) { |
10 | HanyuPinyinOutputFormat pyFormat = new HanyuPinyinOutputFormat(); |
11 | pyFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); |
12 | pyFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); |
13 | pyFormat.setVCharType(HanyuPinyinVCharType.WITH_V); |
14 |
15 | return PinyinHelper.toHanyuPinyinString(name, pyFormat, "" ); |
16 | } |
17 |
18 | //姓、名的第一个字母需要为大写 |
19 | public static String getUpEname(String name) { |
20 | char [] strs = name.toCharArray(); |
21 | String newname = null ; |
22 | |
23 | //名字的长度 |
24 | if (strs.length == 2 ) { |
25 | newname = toUpCase(getEname( "" + strs[ 0 ])) + " " |
26 | + toUpCase(getEname( "" + strs[ 1 ])); |
27 | } else if (strs.length == 3 ) { |
28 | newname = toUpCase(getEname( "" + strs[ 0 ])) + " " |
29 | + toUpCase(getEname( "" + strs[ 1 ] + strs[ 2 ])); |
30 | } else if (strs.length == 4 ) { |
31 | newname = toUpCase(getEname( "" + strs[ 0 ] + strs[ 1 ])) + " " |
32 | + toUpCase(getEname( "" + strs[ 2 ] + strs[ 3 ])); |
33 | } else { |
34 | newname = toUpCase(getEname(name)); |
35 | } |
36 |
37 | return newname; |
38 | } |
39 |
40 | //首字母大写 |
41 | private static String toUpCase(String str) { |
42 | StringBuffer newstr = new StringBuffer(); |
43 | newstr.append((str.substring( 0 , 1 )).toUpperCase()).append( |
44 | str.substring( 1 , str.length())); |
45 |
46 | return newstr.toString(); |
47 | } |
48 |
49 | public static void main(String[] args) { |
50 | System.out.println(getUpEname( "李宇春" )); |
51 |
52 | } |
53 |
54 | } |
方法二:
package cn.com.utility.string.pinyin; |
002 |
003 | import net.sourceforge.pinyin4j.PinyinHelper; |
004 | import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; |
005 | import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; |
006 | import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; |
007 | import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; |
008 | import cn.com.testClass.P; |
009 |
010 | /** |
011 |
* @className:PinyingUtil.java |
012 |
* @classDescription:拼音操作工具类 |
013 |
* @author:xiayingjie |
014 |
* @createTime:2010-10-21 |
015 |
*/ |
016 |
017 | public class HanYuPinYinUtility { |
018 |
019 | /** |
020 | * 将字符串转换成拼音数组 |
021 | * |
022 | * @param src |
023 | * @return |
024 | */ |
025 | public static String[] stringToPinyin(String src) { |
026 | return stringToPinyin(src, false , null ); |
027 | } |
028 | /** |
029 | * 将字符串转换成拼音数组 |
030 | * |
031 | * @param src |
032 | * @return |
033 | */ |
034 | public static String[] stringToPinyin(String src,String separator) { |
035 | return stringToPinyin(src, true , separator); |
036 | } |
037 |
038 | /** |
039 | * 将字符串转换成拼音数组 |
040 | * |
041 | * @param src |
042 | * @param isPolyphone |
043 | * 是否查出多音字的所有拼音 |
044 | * @param separator |
045 | * 多音字拼音之间的分隔符 |
046 | * @return |
047 | */ |
048 | public static String[] stringToPinyin(String src, boolean isPolyphone, |
049 | String separator) { |
050 | // 判断字符串是否为空 |
051 | if ( "" .equals(src) || null == src) { |
052 | return null ; |
053 | } |
054 | char [] srcChar = src.toCharArray(); |
055 | int srcCount = srcChar.length; |
056 | String[] srcStr = new String[srcCount]; |
057 |
058 | for ( int i = 0 ; i < srcCount; i++) { |
059 | srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator); |
060 | } |
061 | return srcStr; |
062 | } |
063 |
064 | /** |
065 | * 将单个字符转换成拼音 |
066 | * |
067 | * @param src |
068 | * @return |
069 | */ |
070 | public static String charToPinyin( char src, boolean isPolyphone, |
071 | String separator) { |
072 | // 创建汉语拼音处理类 |
073 | HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); |
074 | // 输出设置,大小写,音标方式 |
075 | defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); |
076 | defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); |
077 |
078 | StringBuffer tempPinying = new StringBuffer(); |
079 | |
080 |
081 | // 如果是中文 |
082 | if (src > 128 ) { |
083 | try { |
084 | // 转换得出结果 |
085 | String[] strs = PinyinHelper.toHanyuPinyinStringArray(src, |
086 | defaultFormat); |
087 | |
088 | |
089 | // 是否查出多音字,默认是查出多音字的第一个字符 |
090 | if (isPolyphone && null != separator) { |
091 | for ( int i = 0 ; i < strs.length; i++) { |
092 | tempPinying.append(strs[i]); |
093 | if (strs.length != (i + 1 )) { |
094 | // 多音字之间用特殊符号间隔起来 |
095 | tempPinying.append(separator); |
096 | } |
097 | } |
098 | } else { |
099 | tempPinying.append(strs[ 0 ]); |
100 | } |
101 |
102 | } catch (BadHanyuPinyinOutputFormatCombination e) { |
103 | e.printStackTrace(); |
104 | } |
105 | } else { |
106 | tempPinying.append(src); |
107 | } |
108 |
109 | return tempPinying.toString(); |
110 |
111 | } |
112 |
113 | |
114 | public static String hanziToPinyin(String hanzi){ |
115 | return hanziToPinyin(hanzi, " " ); |
116 | } |
117 | /** |
118 | * 将汉字转换成拼音 |
119 | * @param hanzi |
120 | * @param separator |
121 | * @return |
122 | */ |
123 | public static String hanziToPinyin(String hanzi,String separator){ |
124 | // 创建汉语拼音处理类 |
125 | HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); |
126 | // 输出设置,大小写,音标方式 |
127 | defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); |
128 | defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); |
129 | |
130 | String pinyingStr= "" ; |
131 | try { |
132 | pinyingStr=PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat, separator); |
133 | } catch (BadHanyuPinyinOutputFormatCombination e) { |
134 | // TODO Auto-generated catch block |
135 | e.printStackTrace(); |
136 | } |
137 | return pinyingStr; |
138 | } |
139 | /** |
140 | * 将字符串数组转换成字符串 |
141 | * @param str |
142 | * @param separator 各个字符串之间的分隔符 |
143 | * @return |
144 | */ |
145 | public static String stringArrayToString(String[] str, String separator) { |
146 | StringBuffer sb = new StringBuffer(); |
147 | for ( int i = 0 ; i < str.length; i++) { |
148 | sb.append(str[i]); |
149 | if (str.length != (i + 1 )) { |
150 | sb.append(separator); |
151 | } |
152 | } |
153 | return sb.toString(); |
154 | } |
155 | /** |
156 | * 简单的将各个字符数组之间连接起来 |
157 | * @param str |
158 | * @return |
159 | */ |
160 | public static String stringArrayToString(String[] str){ |
161 | return stringArrayToString(str, "" ); |
162 | } |
163 | /** |
164 | * 将字符数组转换成字符串 |
165 | * @param str |
166 | * @param separator 各个字符串之间的分隔符 |
167 | * @return |
168 | */ |
169 | public static String charArrayToString( char [] ch, String separator) { |
170 | StringBuffer sb = new StringBuffer(); |
171 | for ( int i = 0 ; i < ch.length; i++) { |
172 | sb.append(ch[i]); |
173 | if (ch.length != (i + 1 )) { |
174 | sb.append(separator); |
175 | } |
176 | } |
177 | return sb.toString(); |
178 | } |
179 | |
180 | /** |
181 | * 将字符数组转换成字符串 |
182 | * @param str |
183 | * @return |
184 | */ |
185 | public static String charArrayToString( char [] ch) { |
186 | return charArrayToString(ch, " " ); |
187 | } |
188 |
189 | /** |
190 | * 取汉字的首字母 |
191 | * @param src |
192 | * @param isCapital 是否是大写 |
193 | * @return |
194 | */ |
195 | public static char [] getHeadByChar( char src, boolean isCapital){ |
196 | //如果不是汉字直接返回 |
197 | if (src <= 128 ) { |
198 | return new char []{src}; |
199 | } |
200 | //获取所有的拼音 |
201 | String []pinyingStr=PinyinHelper.toHanyuPinyinStringArray(src); |
202 | //创建返回对象 |
203 | int polyphoneSize=pinyingStr.length; |
204 | char [] headChars= new char [polyphoneSize]; |
205 | int i= 0 ; |
206 | //截取首字符 |
207 | for (String s:pinyingStr){ |
208 | char headChar=s.charAt( 0 ); |
209 | //首字母是否大写,默认是小写 |
210 | if (isCapital){ |
211 | headChars[i]=Character.toUpperCase(headChar); |
212 | } else { |
213 | headChars[i]=headChar; |
214 | } |
215 | i++; |
216 | } |
217 | |
218 | return headChars; |
219 | } |
220 | /** |
221 | * 取汉字的首字母(默认是大写) |
222 | * @param src |
223 | * @return |
224 | */ |
225 | public static char [] getHeadByChar( char src){ |
226 | return getHeadByChar(src, true ); |
227 | } |
228 | /** |
229 | * 查找字符串首字母 |
230 | * @param src |
231 | * @return |
232 | */ |
233 | public static String[] getHeadByString(String src){ |
234 | return getHeadByString( src, true ); |
235 | } |
236 | /** |
237 | * 查找字符串首字母 |
238 | * @param src |
239 | * @param isCapital 是否大写 |
240 | * @return |
241 | */ |
242 | public static String[] getHeadByString(String src, boolean isCapital){ |
243 | return getHeadByString( src, isCapital, null ); |
244 | } |
245 | /** |
246 | * 查找字符串首字母 |
247 | * @param src |
248 | * @param isCapital 是否大写 |
249 | * @param separator 分隔符 |
250 | * @return |
251 | */ |
252 | public static String[] getHeadByString(String src, boolean isCapital,String separator){ |
253 | char []chars=src.toCharArray(); |
254 | String[] headString= new String[chars.length]; |
255 | int i= 0 ; |
256 | for ( char ch:chars){ |
257 | |
258 | char []chs=getHeadByChar(ch,isCapital); |
259 | StringBuffer sb= new StringBuffer(); |
260 | if ( null !=separator){ |
261 | int j= 1 ; |
262 | |
263 | for ( char ch1:chs){ |
264 | sb.append(ch1); |
265 | if (j!=chs.length){ |
266 | sb.append(separator); |
267 | } |
268 | j++; |
269 | } |
270 | } else { |
271 | sb.append(chs[ 0 ]); |
272 | } |
273 | headString[i]=sb.toString(); |
274 | i++; |
275 | } |
276 | return headString; |
277 | } |
278 | |
279 | public static void main(String[] args) { |
280 | //将字符串转换成拼音数组 |
281 | String test1[]=stringToPinyin( "曹顺写爪哇" ); |
282 | String test1st= "" ; |
283 | for ( int i= 0 ;i<test1.length;i++){ |
284 | test1st+=test1[i]; |
285 | } |
286 | P.S(test1st); |
287 | |
288 | //将字符串转换成拼音数组,以逗号分隔 |
289 | String test2[]=stringToPinyin( "曹顺写爪哇" , "," ); |
290 | String test2st= "" ; |
291 | for ( int i= 0 ;i<test2.length;i++){ |
292 | test2st+= "||||" +test2[i]; |
293 | } |
294 | P.S(test2st); |
295 | |
296 | |
297 | //将汉字转换成拼音 |
298 | P.S( "将汉字转换成拼音 曹顺写爪哇 ---->>>: " +hanziToPinyin( "曹顺写爪哇!" , " " )); |
299 | } |
300 |
301 |
|