浏览代码

fix pinyin bug

Looly 5 年之前
父节点
当前提交
165b915506

+ 1 - 0
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)
 
 -------------------------------------------------------------------------------------------------------------
 

+ 7 - 1
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);
 	}
 
 }

+ 15 - 0
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;
 
@@ -12,6 +13,13 @@ public class PinyinUtilTest {
 	}
 
 	@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("你好怡", " ");
 		Assert.assertEquals("ni hao yi", pinyin);
@@ -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);
+	}
 }

+ 11 - 0
hutool-http/src/main/java/cn/hutool/http/HttpUtil.java

@@ -53,6 +53,17 @@ public class HttpUtil {
 	}
 
 	/**
+	 * 检测是否http
+	 *
+	 * @param url URL
+	 * @return 是否https
+	 * @since 5.3.8
+	 */
+	public static boolean isHttp(String url) {
+		return url.toLowerCase().startsWith("http");
+	}
+
+	/**
 	 * 创建Http请求对象
 	 *
 	 * @param method 方法枚举{@link Method}