示例:实现网络请求中见的网络文本过滤功能,比如: 1、敏感字过滤 2、特殊字符过滤 3、Emoji表情过滤 ……
版本一public static void main(String[] args) {
String msg ="alert('这是一个差生凸^-^凸')";
String res = msg.replace('',']')
.replaceAll("差生","后进生")
.replace("凸^-^凸","伤心"); //此处必须得使用replace方法,不能使用replaceAll
System.out.println(res);
}
结果:
-
文件处理类
public class MsgProcessor { private String msg; public void setMsg(String msg) { this.msg = msg; } public String process() { return msg.replace('', ']') .replaceAll("差生", "后进生") .replace("凸^-^凸", "伤心"); } }
-
测试类
public class Demo { private static String msg ="alert('这是一个差生凸^-^凸')"; public static void main(String[] args) { MsgProcessor processor = new MsgProcessor(); processor.setMsg(msg); String res = processor.process(); System.out.println(res); } }
-
针对文本过滤功能提供一个统一的Filter接口
public interface MsgFilter { String doFilter(String msg); }
-
过滤敏感字的功能类
public class SensitiveFilter implements MsgFilter { @Override public String doFilter(String msg) { return msg.replaceAll("差生", "后进生"); } }
-
过滤特殊字符的功能类
public class HtmlFilter implements MsgFilter { @Override public String doFilter(String msg) { return msg.replace('', ']'); } }
-
过滤Emoji表情的功能类
public class EmojiFilter implements MsgFilter { @Override public String doFilter(String msg) { return msg.replace("凸^-^凸", "伤心"); } }
-
调用过滤器实现文本过滤的类
public class MsgProcessor { private String msg; public void setMsg(String msg) { this.msg = msg; } private MsgFilter[] filters = {new HtmlFilter(),new SensitiveFilter(),new EmojiFilter()}; public String process() { for(MsgFilter filter : filters){ msg = filter.doFilter(msg); } return msg; } }
-
测试代码
public class Demo { private static String msg ="alert('这是一个差生凸^-^凸')"; public static void main(String[] args) { MsgProcessor processor = new MsgProcessor(); processor.setMsg(msg); String res = processor.process(); System.out.println(res); } }
-
添加新的类FilterChain,用来模拟责任链功能
public class FilterChain implements MsgFilter { List filters = new ArrayList(); public FilterChain addFilter(MsgFilter filter) { filters.add(filter); return this; } @Override public String doFilter(String msg) { for (MsgFilter filter : filters) { msg = filter.doFilter(msg); } return msg; } }
-
修改MsgProcessor类
public class MsgProcessor { private String msg; private FilterChain filterChain; public void setMsg(String msg) { this.msg = msg; } public void setFilterChain(FilterChain filterChain) { this.filterChain = filterChain; } public String process() { return filterChain.doFilter(msg); } }
-
测试代码:
public class Demo { private static String msg = "alert('这是一个差生凸^-^凸')"; public static void main(String[] args) { FilterChain filterChain1 = new FilterChain(); filterChain1.addFilter(new SensitiveFilter()); filterChain1.addFilter(new HtmlFilter()); FilterChain filterChain2 = new FilterChain(); filterChain2.addFilter(new EmojiFilter()); filterChain1.addFilter(filterChain2); MsgProcessor processor = new MsgProcessor(); processor.setMsg(msg); processor.setFilterChain(filterChain1); String res = processor.process(); System.out.println(res); } }
-
Filter接口:
public interface MsgFilter { void doFilter(Request request,Response response,FilterChain filterChain); }
-
特殊字符过滤类
public class HtmlFilter implements MsgFilter { @Override public void doFilter(Request request,Response response,FilterChain filterChain) { request. msg = request.msg.replace('', ']')+" --HtmlFilter() "; filterChain.doFilter(request,response,filterChain); response.msg += "-- HtmlFilter() "; } }
-
敏感字过滤类
public class SensitiveFilter implements MsgFilter { @Override public void doFilter(Request request,Response response,FilterChain filterChain) { request. msg = request.msg.replaceAll("差生", "后进生")+" --SensitiveFilter() "; filterChain.doFilter(request,response,filterChain); response.msg += "-- SensitiveFilter() "; } }
-
Emoji过滤类
public class EmojiFilter implements MsgFilter { @Override public void doFilter(Request request,Response response,FilterChain filterChain) { request. msg = request.msg.replace("凸^-^凸", "伤心")+" --EmojiFilter() "; filterChain.doFilter(request,response,filterChain); response.msg += "-- EmojiFilter() "; } }
-
过滤器链
public class FilterChain implements MsgFilter { int index = 0; List filters = new ArrayList(); public FilterChain addFilter(MsgFilter filter) { filters.add(filter); return this; } @Override public void doFilter(Request request,Response response,FilterChain filterChain) { if(index == filters.size()) { return; } MsgFilter filter = filters.get(index); index ++; filter.doFilter(request,response,filterChain); } }
-
测试代码
public class Demo { private static String msg = "alert('这是一个差生凸^-^凸')"; public static void main(String[] args) { Request request = new Request(); request.msg = msg; Response response = new Response(); response.msg = "response: "; FilterChain filterChain = new FilterChain().addFilter(new SensitiveFilter()) .addFilter(new HtmlFilter()) .addFilter(new EmojiFilter()); filterChain.doFilter(request,response,filterChain); System.out.println(request.msg); System.out.println(response.msg); } }
结果: