From b384198d5b261a602b8899ba7188ab446b7d6fed Mon Sep 17 00:00:00 2001 From: yudasen <2436348937@qq.com> Date: Sun, 16 Feb 2025 18:42:31 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E6=8F=90=E4=BE=9B=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E6=9B=BF=E6=8D=A2=E7=AD=96=E7=95=A5=E7=9A=84api,?= =?UTF-8?q?=E8=A7=A3=E5=86=B3issue#36=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sensitive/word/api/ISensitiveWord.java | 8 +++++--- .../sensitive/word/bs/SensitiveWordBs.java | 5 ++++- .../word/core/AbstractSensitiveWord.java | 7 +++---- .../word/bs/SensitiveWordBsReplaceTest.java | 20 +++++++++++++++++++ 4 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 src/test/java/com/github/houbb/sensitive/word/bs/SensitiveWordBsReplaceTest.java diff --git a/src/main/java/com/github/houbb/sensitive/word/api/ISensitiveWord.java b/src/main/java/com/github/houbb/sensitive/word/api/ISensitiveWord.java index c3de23d..fe921a4 100644 --- a/src/main/java/com/github/houbb/sensitive/word/api/ISensitiveWord.java +++ b/src/main/java/com/github/houbb/sensitive/word/api/ISensitiveWord.java @@ -33,16 +33,18 @@ public interface ISensitiveWord { /** * 替换所有敏感词内容 - * + *

* ps: 这里可以添加优化。 * - * @param target 目标字符串 + * @param target 目标字符串 * @param context 上下文 + * @param replace 替换策略 * @return 替换后结果 * @since 0.3.2 */ String replace(final String target, - final IWordContext context); + final IWordContext context, + final IWordReplace replace); /** * 包含 diff --git a/src/main/java/com/github/houbb/sensitive/word/bs/SensitiveWordBs.java b/src/main/java/com/github/houbb/sensitive/word/bs/SensitiveWordBs.java index 31441f3..a9afa35 100644 --- a/src/main/java/com/github/houbb/sensitive/word/bs/SensitiveWordBs.java +++ b/src/main/java/com/github/houbb/sensitive/word/bs/SensitiveWordBs.java @@ -592,7 +592,10 @@ public class SensitiveWordBs implements ISensitiveWordDestroy { * @since 0.2.0 */ public String replace(final String target) { - return sensitiveWord.replace(target, context); + return this.replace(target,context.wordReplace()); + } + public String replace(final String target, IWordReplace replace) { + return sensitiveWord.replace(target, context, replace); } /** diff --git a/src/main/java/com/github/houbb/sensitive/word/core/AbstractSensitiveWord.java b/src/main/java/com/github/houbb/sensitive/word/core/AbstractSensitiveWord.java index 7648300..28c8866 100644 --- a/src/main/java/com/github/houbb/sensitive/word/core/AbstractSensitiveWord.java +++ b/src/main/java/com/github/houbb/sensitive/word/core/AbstractSensitiveWord.java @@ -38,10 +38,9 @@ public abstract class AbstractSensitiveWord implements ISensitiveWord { * @return 结果 * @since 0.3.2 */ - protected String doReplace(String target, List allList, IWordContext context) { + protected String doReplace(String target, List allList, IWordContext context, IWordReplace replace) { // 根据 index 直接分割 - final IWordReplace replace = context.wordReplace(); // 是否需要对 allList 排序? StringBuilder stringBuilder = new StringBuilder(); @@ -91,7 +90,7 @@ public abstract class AbstractSensitiveWord implements ISensitiveWord { } @Override - public String replace(String target, IWordContext context) { + public String replace(String target, IWordContext context, IWordReplace replace) { if(StringUtil.isEmpty(target)) { return target; } @@ -101,7 +100,7 @@ public abstract class AbstractSensitiveWord implements ISensitiveWord { return target; } - return doReplace(target, allList, context); + return doReplace(target, allList, context, replace); } @Override diff --git a/src/test/java/com/github/houbb/sensitive/word/bs/SensitiveWordBsReplaceTest.java b/src/test/java/com/github/houbb/sensitive/word/bs/SensitiveWordBsReplaceTest.java new file mode 100644 index 0000000..30ccdc9 --- /dev/null +++ b/src/test/java/com/github/houbb/sensitive/word/bs/SensitiveWordBsReplaceTest.java @@ -0,0 +1,20 @@ +package com.github.houbb.sensitive.word.bs; + +import com.github.houbb.sensitive.word.api.IWordReplace; +import com.github.houbb.sensitive.word.replace.MyWordReplace; +import org.junit.Assert; +import org.junit.Test; + +public class SensitiveWordBsReplaceTest { + + @Test + public void defineReplaceTest() { + final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。"; + SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance().init(); + + IWordReplace replace = new MyWordReplace(); + String result = sensitiveWordBs.replace(text, replace); + + Assert.assertEquals("国家旗帜迎风飘扬,教员的画像屹立在***前。", result); + } +}