From db20737abba754546a739fc8ffd3be9eecbdaa12 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 11 Jan 2020 15:08:22 +0800 Subject: [PATCH] fix bug --- CHANGELOG.md | 3 ++- .../cn/hutool/core/text/TextSimilarity.java | 7 ++++--- .../{lang => text}/TextSimilarityTest.java | 12 +++++++---- .../java/cn/hutool/core/util/ReUtilTest.java | 21 ++++++------------- 4 files changed, 20 insertions(+), 23 deletions(-) rename hutool-core/src/test/java/cn/hutool/core/{lang => text}/TextSimilarityTest.java (67%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0823b6f53..fcde14b01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,8 @@ ### Bug修复 * 【core 】 修复NumberUtil.mul中null的结果错误问题(issue#I17Y4J@Gitee) * 【core 】 修复当金额大于等于1亿时,转换会多出一个万字的bug(pr#715@Github) -* 【core 】 修复FileUtil.listFileNames位于jar内导致的文件找不到问题(issue#listFileNames@Gitee) +* 【core 】 修复FileUtil.listFileNames位于jar内导致的文件找不到问题 +* 【core 】 修复TextSimilarity.similar去除字符导致的问题(issue#I17K2A@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/text/TextSimilarity.java b/hutool-core/src/main/java/cn/hutool/core/text/TextSimilarity.java index c37dc89fa..4a63fb480 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/TextSimilarity.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/TextSimilarity.java @@ -28,6 +28,7 @@ public class TextSimilarity { newStrA = removeSign(strA); newStrB = removeSign(strB); } + // 用较大的字符串长度作为分母,相似子串作为分子计算出字串相似度 int temp = Math.max(newStrA.length(), newStrB.length()); if(0 == temp) { @@ -65,7 +66,7 @@ public class TextSimilarity { char c; for (int i = 0; i < length; i++) { c = str.charAt(i); - if(false == isInvalidChar(c)) { + if(isValidChar(c)) { sb.append(c); } } @@ -79,8 +80,8 @@ public class TextSimilarity { * @param charValue 字符 * @return true表示为非汉字,数字和字母,false反之 */ - private static boolean isInvalidChar(char charValue) { - return (charValue >= 0x4E00 && charValue <= 0XFFF) || // + private static boolean isValidChar(char charValue) { + return (charValue >= 0x4E00 && charValue <= 0X9FFF) || // (charValue >= 'a' && charValue <= 'z') || // (charValue >= 'A' && charValue <= 'Z') || // (charValue >= '0' && charValue <= '9'); diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/TextSimilarityTest.java b/hutool-core/src/test/java/cn/hutool/core/text/TextSimilarityTest.java similarity index 67% rename from hutool-core/src/test/java/cn/hutool/core/lang/TextSimilarityTest.java rename to hutool-core/src/test/java/cn/hutool/core/text/TextSimilarityTest.java index 08bd83ca9..36f1d564b 100644 --- a/hutool-core/src/test/java/cn/hutool/core/lang/TextSimilarityTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/text/TextSimilarityTest.java @@ -1,10 +1,8 @@ -package cn.hutool.core.lang; +package cn.hutool.core.text; import org.junit.Assert; import org.junit.Test; -import cn.hutool.core.text.TextSimilarity; - /** * 文本相似度计算工具类单元测试 * @author looly @@ -21,6 +19,12 @@ public class TextSimilarityTest { Assert.assertEquals(0.8571428571428571D, degree, 16); String similarPercent = TextSimilarity.similar(a, b, 2); - Assert.assertEquals("85.71%", similarPercent); + Assert.assertEquals("84.62%", similarPercent); + } + + @Test + public void similarTest(){ + final double abd = TextSimilarity.similar("abd", "1111"); + Assert.assertEquals(0, abd, 1); } } \ No newline at end of file diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ReUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ReUtilTest.java index 2acdd8aee..ac0231c26 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ReUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ReUtilTest.java @@ -1,15 +1,12 @@ package cn.hutool.core.util; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - +import cn.hutool.core.collection.CollectionUtil; import org.junit.Assert; import org.junit.Test; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.lang.func.Func1; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; public class ReUtilTest { final String content = "ZZZaaabbbccc中文1234"; @@ -52,7 +49,7 @@ public class ReUtilTest { @Test public void findAllTest() { // 查找所有匹配文本 - List resultFindAll = ReUtil.findAll("\\w{2}", content, 0, new ArrayList()); + List resultFindAll = ReUtil.findAll("\\w{2}", content, 0, new ArrayList<>()); ArrayList expected = CollectionUtil.newArrayList("ZZ", "Za", "aa", "bb", "bc", "cc", "12", "34"); Assert.assertEquals(expected, resultFindAll); } @@ -82,13 +79,7 @@ public class ReUtilTest { @Test public void replaceAllTest2() { //此处把1234替换为 ->1234<- - String replaceAll = ReUtil.replaceAll(this.content, "(\\d+)", new Func1() { - - @Override - public String call(Matcher parameters) { - return "->" + parameters.group(1) + "<-"; - } - }); + String replaceAll = ReUtil.replaceAll(this.content, "(\\d+)", parameters -> "->" + parameters.group(1) + "<-"); Assert.assertEquals("ZZZaaabbbccc中文->1234<-", replaceAll); }