You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.3 KiB
106 lines
3.3 KiB
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
public class DataConverterPipeline {
|
|
|
|
interface DataConverter {
|
|
String convert(String data);
|
|
}
|
|
|
|
static class TrimConverter implements DataConverter {
|
|
@Override
|
|
public String convert(String data) {
|
|
if (data == null) return "";
|
|
return data.trim();
|
|
}
|
|
}
|
|
|
|
static class UpperCaseConverter implements DataConverter {
|
|
@Override
|
|
public String convert(String data) {
|
|
if (data == null) return "";
|
|
return data.toUpperCase();
|
|
}
|
|
}
|
|
|
|
static class LowerCaseConverter implements DataConverter {
|
|
@Override
|
|
public String convert(String data) {
|
|
if (data == null) return "";
|
|
return data.toLowerCase();
|
|
}
|
|
}
|
|
|
|
static class SensitiveWordConverter implements DataConverter {
|
|
@Override
|
|
public String convert(String data) {
|
|
if (data == null) return "";
|
|
return data.replaceAll("敏感词|脏话", "***");
|
|
}
|
|
}
|
|
|
|
static abstract class ConditionalConverter implements DataConverter {
|
|
private List<String> sensitiveWords;
|
|
|
|
public ConditionalConverter(List<String> sensitiveWords) {
|
|
this.sensitiveWords = sensitiveWords;
|
|
}
|
|
|
|
@Override
|
|
public final String convert(String data) {
|
|
if (data == null) return "";
|
|
if (containsSensitiveWord(data)) {
|
|
return doConvert(data);
|
|
}
|
|
return data;
|
|
}
|
|
|
|
protected abstract String doConvert(String data);
|
|
|
|
private boolean containsSensitiveWord(String data) {
|
|
for (String word : sensitiveWords) {
|
|
if (data.contains(word)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
static class SensitiveMaskConverter extends ConditionalConverter {
|
|
public SensitiveMaskConverter(List<String> sensitiveWords) {
|
|
super(sensitiveWords);
|
|
}
|
|
|
|
@Override
|
|
protected String doConvert(String data) {
|
|
return "*".repeat(data.length());
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
List<DataConverter> pipeline = new ArrayList<>(Arrays.asList(
|
|
new TrimConverter(),
|
|
new UpperCaseConverter(),
|
|
new SensitiveWordConverter()
|
|
));
|
|
|
|
String rawData = " 这是一个测试数据,包含敏感词示例 ";
|
|
System.out.println("原始数据:" + rawData);
|
|
|
|
String result = rawData;
|
|
for (DataConverter converter : pipeline) {
|
|
result = converter.convert(result);
|
|
System.out.println("经过" + converter.getClass().getSimpleName() + "转换后:" + result);
|
|
}
|
|
|
|
System.out.println("\n--- 条件转换器测试 ---");
|
|
List<String> sensitiveWords = Arrays.asList("敏感词", "测试");
|
|
DataConverter conditionalConverter = new SensitiveMaskConverter(sensitiveWords);
|
|
String test1 = "普通数据";
|
|
String test2 = "包含测试内容的数据";
|
|
System.out.println("无敏感词数据转换结果:" + conditionalConverter.convert(test1));
|
|
System.out.println("含敏感词数据转换结果:" + conditionalConverter.convert(test2));
|
|
}
|
|
}
|
|
|