From ddf384884b267ee592703ba7928756d258a310b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=81=AByzs?= <835476090@qq.com> Date: Sat, 8 May 2021 00:40:17 +0800 Subject: [PATCH] =?UTF-8?q?fixbug=20WordTree=E8=A6=86=E5=86=99clear?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E2=9C=92=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/dfa/WordTree.java | 11 ++++++++ .../src/test/java/cn/hutool/dfa/DfaTest.java | 26 ++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/hutool-dfa/src/main/java/cn/hutool/dfa/WordTree.java b/hutool-dfa/src/main/java/cn/hutool/dfa/WordTree.java index 1f3d75e36..310f5958b 100644 --- a/hutool-dfa/src/main/java/cn/hutool/dfa/WordTree.java +++ b/hutool-dfa/src/main/java/cn/hutool/dfa/WordTree.java @@ -321,5 +321,16 @@ public class WordTree extends HashMap { this.endCharacterSet.add(c); } } + + /** + * 清除所有的词, + * 此方法调用后, wordTree 将被清空 + * endCharacterSet 也将清空 + */ + @Override + public void clear() { + super.clear(); + this.endCharacterSet.clear(); + } //--------------------------------------------------------------------------------------- Private method end } diff --git a/hutool-dfa/src/test/java/cn/hutool/dfa/DfaTest.java b/hutool-dfa/src/test/java/cn/hutool/dfa/DfaTest.java index 680ea2d78..d466f69b7 100644 --- a/hutool-dfa/src/test/java/cn/hutool/dfa/DfaTest.java +++ b/hutool-dfa/src/test/java/cn/hutool/dfa/DfaTest.java @@ -101,6 +101,30 @@ public class DfaTest { Assert.assertEquals("[women]", matchAll.toString()); } + @Test + public void clearTest(){ + WordTree tree = new WordTree(); + tree.addWord("黑"); + Assert.assertTrue(tree.matchAll("黑大衣").contains("黑")); + //clear时直接调用Map的clear并没有把endCharacterSet清理掉 + tree.clear(); + tree.addWords("黑大衣","红色大衣"); + + //clear() 覆写前 这里想匹配到黑大衣,但是却匹配到了黑 +// Assert.assertFalse(tree.matchAll("黑大衣").contains("黑大衣")); +// Assert.assertTrue(tree.matchAll("黑大衣").contains("黑")); + //clear() 覆写后 + Assert.assertTrue(tree.matchAll("黑大衣").contains("黑大衣")); + Assert.assertFalse(tree.matchAll("黑大衣").contains("黑")); + Assert.assertTrue(tree.matchAll("红色大衣").contains("红色大衣")); + + //如果不覆写只能通过new出新对象才不会有问题 + tree = new WordTree(); + tree.addWords("黑大衣","红色大衣"); + Assert.assertTrue(tree.matchAll("黑大衣").contains("黑大衣")); + Assert.assertTrue(tree.matchAll("红色大衣").contains("红色大衣")); + } + // ---------------------------------------------------------------------------------------------------------- /** * 构建查找树 @@ -117,4 +141,4 @@ public class DfaTest { tree.addWord("出锅"); return tree; } -} \ No newline at end of file +}