PinyinUtil增加选择是否返回声调

This commit is contained in:
choweli 2025-02-26 13:39:16 +08:00
parent 4ef8814c14
commit 220148d555
7 changed files with 161 additions and 0 deletions

View File

@ -21,6 +21,15 @@ public interface PinyinEngine {
*/
String getPinyin(char c);
/**
* 如果c为汉字则返回大写拼音如果c不是汉字则返回String.valueOf(c)
*
* @param c 任意字符汉字返回拼音非汉字原样返回
* @param tone 是否返回声调
* @return 汉字返回拼音非汉字原样返回
*/
String getPinyin(char c, boolean tone);
/**
* 获取字符串对应的完整拼音非中文返回原字符
*
@ -30,6 +39,17 @@ public interface PinyinEngine {
*/
String getPinyin(String str, String separator);
/**
* 获取字符串对应的完整拼音非中文返回原字符
*
* @param str 字符串
* @param separator 拼音之间的分隔符
* @param tone 是否返回声调
* @return 拼音
*/
String getPinyin(String str, String separator,boolean tone);
/**
* 将输入字符串转为拼音首字母其它字符原样返回
*

View File

@ -31,6 +31,17 @@ public class PinyinUtil {
return getEngine().getPinyin(c);
}
/**
* 如果c为汉字则返回大写拼音如果c不是汉字则返回String.valueOf(c)
*
* @param c 任意字符汉字返回拼音非汉字原样返回
* @param tone 是否返回声调
* @return 汉字返回拼音非汉字原样返回
*/
public static String getPinyin(final char c, boolean tone) {
return getEngine().getPinyin(c,tone);
}
/**
* 将输入字符串转为拼音每个字之间的拼音使用空格分隔
*
@ -41,6 +52,17 @@ public class PinyinUtil {
return getPinyin(str, StrUtil.SPACE);
}
/**
* 将输入字符串转为拼音每个字之间的拼音使用空格分隔
*
* @param str 任意字符汉字返回拼音非汉字原样返回
* @param tone 是否返回声调
* @return 汉字返回拼音非汉字原样返回
*/
public static String getPinyin(final String str, boolean tone) {
return getPinyin(str, StrUtil.SPACE, tone);
}
/**
* 将输入字符串转为拼音以字符为单位插入分隔符
*
@ -52,6 +74,18 @@ public class PinyinUtil {
return getEngine().getPinyin(str, separator);
}
/**
* 将输入字符串转为拼音以字符为单位插入分隔符
*
* @param str 任意字符汉字返回拼音非汉字原样返回
* @param separator 每个字拼音之间的分隔符
* @param tone 是否返回声调
* @return 汉字返回拼音非汉字原样返回
*/
public static String getPinyin(final String str, final String separator, boolean tone) {
return getEngine().getPinyin(str, separator, tone);
}
/**
* 将输入字符串转为拼音首字母其它字符原样返回
*

View File

@ -36,8 +36,26 @@ public class Bopomofo4jEngine implements PinyinEngine {
return Bopomofo4j.pinyin(String.valueOf(c), ToneType.WITHOUT_TONE, false, false, StrUtil.EMPTY);
}
@Override
public String getPinyin(char c, boolean tone) {
if (tone) {
return Bopomofo4j.pinyin(String.valueOf(c), ToneType.WITH_VOWEL_TONE, false, false, StrUtil.EMPTY);
}else{
return getPinyin(c);
}
}
@Override
public String getPinyin(String str, String separator) {
return Bopomofo4j.pinyin(str, ToneType.WITHOUT_TONE, false, false, separator);
}
@Override
public String getPinyin(String str, String separator, boolean tone) {
if (tone) {
return Bopomofo4j.pinyin(str, ToneType.WITH_VOWEL_TONE, false, false, separator);
}else{
return getPinyin(str, separator);
}
}
}

View File

@ -65,10 +65,34 @@ public class HoubbPinyinEngine implements PinyinEngine {
return result;
}
@Override
public String getPinyin(char c, boolean tone) {
try{
if(tone){
format = PinyinStyleEnum.DEFAULT;
}
return getPinyin(c);
}finally {
format = PinyinStyleEnum.NORMAL;
}
}
@Override
public String getPinyin(String str, String separator) {
String result;
result = PinyinHelper.toPinyin(str, format, separator);
return result;
}
@Override
public String getPinyin(String str, String separator, boolean tone) {
try{
if(tone){
format = PinyinStyleEnum.DEFAULT;
}
return getPinyin(str,separator);
}finally {
format = PinyinStyleEnum.NORMAL;
}
}
}

View File

@ -53,6 +53,18 @@ public class JPinyinEngine implements PinyinEngine {
return ArrayUtil.isEmpty(results) ? String.valueOf(c) : results[0];
}
@Override
public String getPinyin(char c, boolean tone) {
try{
if (tone) {
format = PinyinFormat.WITH_TONE_MARK;
}
return getPinyin(c);
}finally {
format = PinyinFormat.WITHOUT_TONE;
}
}
@Override
public String getPinyin(String str, String separator) {
try {
@ -61,4 +73,17 @@ public class JPinyinEngine implements PinyinEngine {
throw new cn.hutool.extra.pinyin.PinyinException(e);
}
}
@Override
public String getPinyin(String str, String separator, boolean tone) {
try{
if (tone) {
format = PinyinFormat.WITH_TONE_MARK;
}
return getPinyin(str,separator);
}finally {
format = PinyinFormat.WITHOUT_TONE;
}
}
}

View File

@ -82,6 +82,21 @@ public class Pinyin4jEngine implements PinyinEngine {
return result;
}
@Override
public String getPinyin(char c, boolean tone) {
try {
if(tone){
//增加声调
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
}
return getPinyin(c);
}finally {
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
}
}
@Override
public String getPinyin(String str, String separator) {
final StrBuilder result = StrUtil.strBuilder();
@ -107,4 +122,19 @@ public class Pinyin4jEngine implements PinyinEngine {
return result.toString();
}
@Override
public String getPinyin(String str, String separator, boolean tone) {
try {
if(tone){
//增加声调
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
}
return getPinyin(str, separator);
}finally {
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
}
}
}

View File

@ -50,10 +50,20 @@ public class TinyPinyinEngine implements PinyinEngine {
return Pinyin.toPinyin(c).toLowerCase();
}
@Override
public String getPinyin(char c, boolean tone) {
return getPinyin(c);
}
@Override
public String getPinyin(String str, String separator) {
final String pinyin = Pinyin.toPinyin(str, separator);
return StrUtil.isEmpty(pinyin) ? pinyin : pinyin.toLowerCase();
}
@Override
public String getPinyin(String str, String separator, boolean tone) {
return getPinyin(str, separator);
}
}