需求:把名字变成拼音,然后用空格分割每个字
我学生用面向过程的思想来编实现这个类,我把他的代码稍微整理了下,下面是他的代码:
pom.xml
先要去导入一个三方jar,用于转化拼音
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
PinyinTool
package org.chb.test;
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;
/**
*
* Created by 33css
*/
public class PinyinTool {
HanyuPinyinOutputFormat format = null;
public PinyinTool() {
format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
}
/**
* 将str转换成拼音,如果不是汉字或者没有对应的拼音,则不作转换 如: 明天 转换成 MINGTIAN
*
* @param content
* @return
* @throws BadHanyuPinyinOutputFormatCombination
*/
public String toPinYin(String content, HanyuPinyinOutputFormat format)
throws BadHanyuPinyinOutputFormatCombination {
if (content == null || content.trim().length() == 0)
return "";
StringBuffer result = new StringBuffer();
for (int i = 0; i < content.length(); i++) {
char c = content.charAt(i);
result.append(getPinyin(c, format)).append(" ");
}
return result.toString();
}
/**
* 把传入的汉字变成拼音
* @param content 汉字内容
* @param format 拼音格式
* @return
*/
private String getPinyin(char content, HanyuPinyinOutputFormat format) {
if ((int) content <= 128) {//如果小于128 说明不是中文汉字 则直接返回
return String.valueOf(content);
} else {
try {
return PinyinHelper.toHanyuPinyinStringArray(content, format)[0];//toHanyuPinyinStringArray多音字 会获取到数组 使用第一个字
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
}
return null;
}
}
test测试该功能
package org.chb.test;
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;
public class Test {
public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {
PinyinTool tool = new PinyinTool();
System.out.println(tool.toPinYin("罗若峰", createFormat()));
}
/**
* 创建样式
* @return
*/
public static HanyuPinyinOutputFormat createFormat() {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
return format;
}
}
这样写代码好吗?如果现在有了新的需求:
想把姓 放在名的后面,或者是一些其他需求,你就会去pinyinTool这个类中写,更多的方法,需求越多,就会变得越冗长,你会发现面相过程编程,会变成一个坑,需求增加的越多,代码就越乱。
在pinyinTool中增加方法
/**
* 把名字放到姓的前面
* @param content 内容
* @return 返回名字在前的字段,如:若峰罗
*/
private String sortContent(String content) {
return content.substring(1)+content.substring(0,1);
}
/**
* 将str转换成拼音,如果不是汉字或者没有对应的拼音,则不作转换 如: 明天 转换成 MINGTIAN
*
* @param content
* @return
* @throws BadHanyuPinyinOutputFormatCombination
*/
public String toPinYin(String content, HanyuPinyinOutputFormat format)
throws BadHanyuPinyinOutputFormatCombination {
if (content == null || content.trim().length() == 0)
return "";
StringBuffer result = new StringBuffer();
content = sortContent(content);//修改名和姓的顺序
for (int i = 0; i < content.length(); i++) {
char c = content.charAt(i);
result.append(getPinyin(c, format)).append(" ");
}
return result.toString();
}
如想看面相对象的实现,请看下回分解