java - 将带值的字符串与带占位符的字符串进行比较以从中查找值

标签 java

我有如下模板

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 先出现,或者 iduser 没有出现在根本没有模板)。

它的作用:

  • 转义模板中的所有 . 字符,以免它们弄乱正则表达式
  • 将模板中的{user}替换为(.*)(捕获组1)
  • 将模板中的{id}替换为(.*)(捕获组2)
  • 将正则表达式应用于带有值的字符串
  • 提取匹配项(如果正则表达式匹配)

与@zx81 的建议基本相同,唯一的区别是这里的正则表达式是基于模板动态创建的。

关于java - 将带值的字符串与带占位符的字符串进行比较以从中查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24465611/

相关文章:

java - 如何创建Java类ScheduledThreadPoolExecutor的bean

java - Spring Batch ItemReader + RabbitMQ - 未指定 'queue'

java - 没有 createQuery() 的 Hibernate 连接

java - websphere 8.5.5.6 服务器有 java 6 和 7 但我需要 java 8 如何将 java sdk 添加到现有的 websphere 服务器

java - @ModelAttribute 忽略某些字段

java - 使用rest来通信两个基于表单的springboot应用程序

java - 需要帮助将不同的纹理添加到 JOGL 中的不同对象

java - 每次检查 JCheckBox 或 JButton 时需要帮助添加数字

java - ReSTLet - 如何同时使用 HTTP/HTTPS 公开资源?

java - 如何使用并发执行器 future 在java中的固定时间后使方法超时?