From 165b91550653d24ab8509495f7ee7ef3b865145a Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 16 Jun 2020 10:58:55 +0800 Subject: [PATCH] fix pinyin bug --- CHANGELOG.md | 1 + .../pinyin/engine/pinyin4j/Pinyin4jEngine.java | 8 +++++++- .../cn/hutool/extra/pinyin/PinyinUtilTest.java | 15 +++++++++++++++ .../src/main/java/cn/hutool/http/HttpUtil.java | 11 +++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49fb4c0cf..7d2bfd0ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ * 【poi 】 修复WordWriter写表格问题(pr#914@Github) * 【core 】 修复IoUtil.readBytes缓存数组长度问题(issue#I1KIUE@Gitee) * 【core 】 修复BigExcelWriter多次flush导致的问题(issue#920@Github) +* 【extra 】 绕过Pinyin4j最后一个分隔符失效的bug(issue#921@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java b/hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java index 3de08d659..a70e27cc6 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java @@ -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); } } diff --git a/hutool-extra/src/test/java/cn/hutool/extra/pinyin/PinyinUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/pinyin/PinyinUtilTest.java index ef2164245..deae1c881 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/pinyin/PinyinUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/pinyin/PinyinUtilTest.java @@ -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); + } } diff --git a/hutool-http/src/main/java/cn/hutool/http/HttpUtil.java b/hutool-http/src/main/java/cn/hutool/http/HttpUtil.java index 39a0c3f79..3b1edbbde 100644 --- a/hutool-http/src/main/java/cn/hutool/http/HttpUtil.java +++ b/hutool-http/src/main/java/cn/hutool/http/HttpUtil.java @@ -52,6 +52,17 @@ public class HttpUtil { return url.toLowerCase().startsWith("https"); } + /** + * 检测是否http + * + * @param url URL + * @return 是否https + * @since 5.3.8 + */ + public static boolean isHttp(String url) { + return url.toLowerCase().startsWith("http"); + } + /** * 创建Http请求对象 *