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

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