feature: 提供自定义替换策略的api,解决issue#36的问题

This commit is contained in:
yudasen
2025-02-16 18:42:31 +08:00
parent 1c794ee806
commit b384198d5b
4 changed files with 32 additions and 8 deletions

View File

@@ -33,16 +33,18 @@ public interface ISensitiveWord {
/**
* 替换所有敏感词内容
*
* <p>
* 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);
/**
* 包含

View File

@@ -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);
}
/**

View File

@@ -38,10 +38,9 @@ public abstract class AbstractSensitiveWord implements ISensitiveWord {
* @return 结果
* @since 0.3.2
*/
protected String doReplace(String target, List<IWordResult> allList, IWordContext context) {
protected String doReplace(String target, List<IWordResult> 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

View File

@@ -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);
}
}