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

来源:互联网 发布:房地产薪酬排名知乎 编辑:程序博客网 时间:2024/06/01 09:56

我现在用面向对象的思想来实现名字的转换





把名字中每个字都看成一个对象,建立类PinyinChar

该类包括字和拼音对象属性





package org.lrf.pinyin;import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;/** * 单个汉字,属性包括拼音 * @author 33css.com * */public class PinyinChar{/** *  把单个汉字转成拼音 * @param content 单个汉字 * @param format 格式 */public PinyinChar(char content, HanyuPinyinOutputFormat format) {this.content = content;setPinyin(this.content, format);}private final char content; private String pinyin;public String getPinyin() {return pinyin;}/** * 把传入的汉字变成拼音 * @param content 汉字内容 * @param format 拼音格式 * @return */private void setPinyin(char content, HanyuPinyinOutputFormat format) {if ((int) content <= 128) {//如果小于128 说明不是中文汉字 则直接返回pinyin = String.valueOf(content);} else {try {pinyin = PinyinHelper.toHanyuPinyinStringArray(content, format)[0];//toHanyuPinyinStringArray多音字 会获取到数组 使用第一个字} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}}}@Overridepublic String toString() {return this.pinyin;}}



创建一个NameHandler,用于创建,管理,排序每一个pinyinChar集合,重写toSring方法以便调用者输出


package org.lrf.pinyin;import java.util.ArrayList;import java.util.List;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 NameHandler {public NameHandler(String name) {this.name = name;addPinYinNameToList();}private List<PinyinChar> pinyinChars;private String name;/**      * 将名字转换成拼音      *       * @throws BadHanyuPinyinOutputFormatCombination      */      private void addPinYinNameToList()  {          pinyinChars = new ArrayList<>();                StringBuffer result = new StringBuffer();          for (int i = 0; i < name.length(); i++) {          PinyinChar pinyinChar = new PinyinChar(name.charAt(i), createFormat());          pinyinChars.add(pinyinChar);        }                  sortPinyinChars();//把名字放到姓的前面     }          /**      * 把名字放到姓的前面       */      private void sortPinyinChars() {      pinyinChars.add(pinyinChars.get(0));    pinyinChars.remove(0);    }         /**      * 创建样式      * @return      */      public static HanyuPinyinOutputFormat createFormat() {          HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();          format.setCaseType(HanyuPinyinCaseType.LOWERCASE);          format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);          return format;      }          /**     * 拼接list中每个拼音     */    @Override    public String toString() {    StringBuffer result = new StringBuffer();    for (PinyinChar pinyinChar : pinyinChars) {    result.append(pinyinChar.toString()).append(" ");}    return result.toString();    }}

入口方法

package org.lrf.pinyin;public class Test {public static void main(String[] args) {System.out.println(new NameHandler("罗若峰").toString());}}

面向对象很美,我爱面向对象

阅读全文
5 0