All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.extra.pinyin.engine.pinyin4j.Pinyin4jEngine Maven / Gradle / Ivy

There is a newer version: 5.8.33
Show newest version
package cn.hutool.extra.pinyin.engine.pinyin4j;

import cn.hutool.core.text.StrBuilder;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.pinyin.PinyinEngine;
import cn.hutool.extra.pinyin.PinyinException;
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.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 封装了Pinyin4j的引擎。
 *
 * 

* pinyin4j(http://sourceforge.net/projects/pinyin4j)封装。 *

* *

* 引入: *

 * <dependency>
 *     <groupId>com.belerweb</groupId>
 *     <artifactId>pinyin4j</artifactId>
 *     <version>2.5.1</version>
 * </dependency>
 * 
* * @author looly */ public class Pinyin4jEngine implements PinyinEngine { //设置汉子拼音输出的格式 HanyuPinyinOutputFormat format; /** * 构造 */ public Pinyin4jEngine() { this(null); } /** * 构造 * * @param format 格式 */ public Pinyin4jEngine(HanyuPinyinOutputFormat format) { init(format); } /** * 初始化 * * @param format 格式 */ public void init(HanyuPinyinOutputFormat format) { if (null == format) { format = new HanyuPinyinOutputFormat(); // 小写 format.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 不加声调 format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 'ü' 使用 "v" 代替 format.setVCharType(HanyuPinyinVCharType.WITH_V); } this.format = format; } @Override public String getPinyin(char c) { String result; try { String[] results = PinyinHelper.toHanyuPinyinStringArray(c, format); result = ArrayUtil.isEmpty(results) ? String.valueOf(c) : results[0]; } catch (BadHanyuPinyinOutputFormatCombination e) { result = String.valueOf(c); } return result; } @Override public String getPinyin(String str, String separator) { final StrBuilder result = StrUtil.strBuilder(); boolean isFirst = true; final int strLen = str.length(); try { for(int i = 0; i < strLen; i++){ if(isFirst){ isFirst = false; } else{ result.append(separator); } final String[] pinyinStringArray = PinyinHelper.toHanyuPinyinStringArray(str.charAt(i), format); if(ArrayUtil.isEmpty(pinyinStringArray)){ result.append(str.charAt(i)); } else{ result.append(pinyinStringArray[0]); } } } catch (BadHanyuPinyinOutputFormatCombination e) { throw new PinyinException(e); } return result.toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy