我有如下模板
Hello {user}, your request id is {id}, -------1
我的文本中填充了值,例如
Hello ABC , your request id is 1234. --------2
现在我程序的输入是 2,我想检索像这样的值
{user} = ABC
{id} = 1234
能否请您建议我解决上述问题的任何方法。提前致谢。
我想检索模板中有占位符的值。输入是带有值的字符串,我必须将模板与该字符串匹配,以从该字符串的模板中检索占位符的值。
最佳答案
如果您想使用模板进行解析,您可以执行以下操作:
public static void main(String[] args) {
String template = "Hello {user}, your request id is {id}.";
String withValues = "Hello ABC , your request id is 1234.";
String patternFromTemplate = template.replaceAll("\\.", "\\\\."); // escape "."
patternFromTemplate = patternFromTemplate.replace("{user}", "(.*)"); // capturing group 1
patternFromTemplate = patternFromTemplate.replace("{id}", "(.*)"); // capturing group 2
Pattern p = Pattern.compile(patternFromTemplate);
Matcher m = p.matcher(withValues);
if (m.matches()) {
System.out.println("{user} = "+m.group(1));
System.out.println("{id} = "+m.group(2));
}
}
但是当字符串用作正则表达式时,请注意模板中具有特殊含义的字符(如 .
)。请注意,如果您的模式发生重大变化(例如,如果 id
先出现,或者 id
或 user
没有出现在根本没有模板)。
它的作用:
- 转义模板中的所有
.
字符,以免它们弄乱正则表达式 - 将模板中的
{user}
替换为(.*)
(捕获组1) - 将模板中的
{id}
替换为(.*)
(捕获组2) - 将正则表达式应用于带有值的字符串
- 提取匹配项(如果正则表达式匹配)
与@zx81 的建议基本相同,唯一的区别是这里的正则表达式是基于模板动态创建的。
关于java - 将带值的字符串与带占位符的字符串进行比较以从中查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24465611/