JAVA面向对象编程艺术与思想:中文转拼音1

需求:把名字变成拼音,然后用空格分割每个字



我学生用面向过程的思想来编实现这个类,我把他的代码稍微整理了下,下面是他的代码:


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();
	}



如想看面相对象的实现,请看下回分解



  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值