fix pinyin bug

This commit is contained in:
Looly
2020-06-16 10:58:55 +08:00
parent cf19fe3003
commit 165b915506
4 changed files with 34 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
package cn.hutool.extra.pinyin.engine.pinyin4j;
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;
@@ -82,11 +83,16 @@ public class Pinyin4jEngine implements PinyinEngine {
@Override
public String getPinyin(String str, String separator) {
// 添加一个后缀是为了解决Pinyin4j的bug在指定分隔符后最后两个词的分隔符失效
str += StrUtil.SPACE;
String result;
try {
return PinyinHelper.toHanYuPinyinString(str, format, separator, true);
result = PinyinHelper.toHanYuPinyinString(str, format, separator, true);
} catch (BadHanyuPinyinOutputFormatCombination e) {
throw new PinyinException(e);
}
return StrUtil.removeSuffix(result, StrUtil.SPACE);
}
}

View File

@@ -1,5 +1,6 @@
package cn.hutool.extra.pinyin;
import cn.hutool.extra.pinyin.engine.pinyin4j.Pinyin4jEngine;
import org.junit.Assert;
import org.junit.Test;
@@ -11,6 +12,13 @@ public class PinyinUtilTest {
Assert.assertEquals("ni hao", pinyin);
}
@Test
public void getPinyinByPinyin4jTest(){
final Pinyin4jEngine engine = new Pinyin4jEngine();
final String pinyin = engine.getPinyin("你好", " ");
Assert.assertEquals("ni hao", pinyin);
}
@Test
public void getPinyinUpperCaseTest(){
final String pinyin = PinyinUtil.getPinyin("你好怡", " ");
@@ -22,4 +30,11 @@ public class PinyinUtilTest {
final String result = PinyinUtil.getFirstLetter("H是第一个", ", ");
Assert.assertEquals("h, s, d, y, g", result);
}
@Test
public void getFirstLetterByPinyin4jTest(){
final Pinyin4jEngine engine = new Pinyin4jEngine();
final String result = engine.getFirstLetter("林海", "");
Assert.assertEquals("lh", result);
}
}