
cn.sanenen.sunutils.utils.sms.template.TemplateUtil Maven / Gradle / Ivy
package cn.sanenen.sunutils.utils.sms.template;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.sanenen.sunutils.utils.sms.template.entity.TemplateInfo;
import cn.sanenen.sunutils.utils.sms.template.entity.TemplateResult;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
* 模版匹配工具类
*
* @author sun
* @date 2020-06-12
**/
public class TemplateUtil {
/**
* 调用模版对象的匹配方法,并返回结果。
* 主要为提取模版中变量对应的值。
* 例:
* 模版:您的欢乐豆还剩余{{count}}个。
* 内容:您的欢乐豆还剩余9584个。
* 结果:count:9584
*
* @param templateInfo 模版对象
* @param content 待匹配内容
* @return TemplateResult
*/
public static TemplateResult matchIn(TemplateInfo templateInfo, String content) {
return templateInfo.matchIn(content);
}
/**
* 查找内容匹配的模版字符串,适合字符不怎么重复的场景。
*
* @param templates 模版字符串集合
* @param content 待匹配内容
* @return 匹配到的模版集合。未匹配返回 new HashSet<>()
*/
public static Set matchIn(Collection templates, String content) {
return matchIn(templates, content, null);
}
/**
* 查找内容匹配的模版字符串,适合字符不怎么重复的场景。
*
* @param templates 模版字符串集合
* @param content 待匹配内容
* @param separator 模版分隔符
* @return 匹配到的模版集合。未匹配返回 new HashSet<>()
*/
public static Set matchIn(Collection templates, String content, String separator) {
HashSet set = new HashSet<>();
if (CollUtil.isEmpty(templates) || StrUtil.isBlank(content)) {
return set;
}
for (String template : templates) {
if (matchIn(template, content, separator)) {
set.add(template);
}
}
return set;
}
/**
* 验证内容是否匹配模版,分隔符为"{{}}",适合字符不怎么重复的场景。
*
* @param template 模版字符串 例:您的验证码是{{}}
* @param content 待匹配内容 例:您的验证码是1234
* @return 匹配模版返回true
*/
public static boolean matchIn(String template, String content) {
return matchIn(template, content, null);
}
/**
* 验证内容是否匹配模版,分隔符为"{{}}",适合字符不怎么重复的场景。
*
* @param template 模版字符串 例:您的验证码是separator
* @param content 待匹配内容 例:您的验证码是1234
* @param separator 分隔符
* @return 匹配模版返回true
*/
public static boolean matchIn(String template, String content, String separator) {
if (StrUtil.isBlank(template) || StrUtil.isBlank(content)) {
return false;
}
if (StrUtil.isBlank(separator)) {
separator = "{{}}";
}
String[] split = ArrayUtil.toArray(StrUtil.split(template, separator), String.class);
int index = 0;
for (int i = 0; i < split.length; i++) {
if (i == split.length - 1 && StrUtil.isBlank(split[i])) {
break;
}
if (StrUtil.isBlank(split[i]))
continue;
int s = content.indexOf(split[i], index);
if (i == 0) {
if (s != 0) {
index = -1;
break;
} else {
index = split[i].length();
continue;
}
}
if (s >= 0) {
index = s + split[i].length();
} else {
index = -1;
break;
}
}
return index != -1;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy