Stream流使用--Pattern.quote
代码业务场景解释:短信配置方法中对短信模板进行处理,拿到短信中的内容进行格式替换删除不符合的字符并更新到原对象mobileMessageDTO中以供后续逻辑使用。将集合中的每个字符转义为正则表达式中的字面量,避免特殊字符(如 *,?例如,如果集合是 ["*", "?", "#"],最终生成的正则表达式为 \*|\?替换 content 中的匹配字符,结果为:"HelloWorldTest"。最终,
demo样例
if (McSwitchConfig.SEND_TEMPLATE_REPLACEMENT_CHARACTERS != null
&& !McSwitchConfig.SEND_TEMPLATE_REPLACEMENT_CHARACTERS.isEmpty()){
String regex = McSwitchConfig.SEND_TEMPLATE_REPLACEMENT_CHARACTERS.stream()
.map(Pattern::quote) .collect(Collectors.joining("|"));
sanitizedContent = content.replaceAll(regex, "");
}
代码业务场景解释:短信配置方法中对短信模板进行处理,拿到短信中的内容进行格式替换删除不符合的字符并更新到原对象mobileMessageDTO中以供后续逻辑使用
Pattern::quote:
将集合中的每个字符转义为正则表达式中的字面量,避免特殊字符(如 *, ?, . 等)被错误解析为正则语法。
例如,如果集合中有字符 * 和 ?,经过 Pattern.quote 转义后会变成 \* 和 \?。
Collectors.joining("|"):
将所有转义后的字符用 | 连接起来,形成一个正则表达式。
例如,如果集合是 ["*", "?", "#"],最终生成的正则表达式为 \*|\?|#。
McSwitchConfig.SEND_TEMPLATE_REPLACEMENT_CHARACTERS = ["*", "?", "#"]
content = "Hello*World?#Test"
执行过程:
检查 SEND_TEMPLATE_REPLACEMENT_CHARACTERS 非空,进入替换逻辑。
构造正则表达式:\*|\?|#。
替换 content 中的匹配字符,结果为:"HelloWorldTest"。
最终,sanitizedContent = "HelloWorldTest"。
更多推荐

所有评论(0)