使用模板从字符串中检索数据

时间:2014-11-18 21:28:22

标签: java string templates

我想根据模板中的参数从字符串中检索数据。 例如:

given string -> "some text, var=20 another part param=45"
template -> "some text, var=${var1} another part param=${var2}"
result -> var1 = 20; var2 = 45

我怎样才能在Java中实现这一结果。是否有一些库或我需要使用正则表达式? 我尝试过不同的模板处理器,但是他们没有必要的功能,我需要与它们相反的东西。

1 个答案:

答案 0 :(得分:0)

我希望以下示例能满足您的目的 -

    String strValue = "some text, var=20 another part param=45";
    String strTemplate = "some text, var=${var1} another part param=${var2}";
    ArrayList<String> wildcards = new ArrayList<String>();
    StringBuffer outputBuffer = new StringBuffer();

    Pattern pat1 = Pattern.compile("(\\$\\{\\w*\\})");
    Matcher mat1 = pat1.matcher(strTemplate);

    while (mat1.find()) 
    {
        wildcards.add(mat1.group(1).replaceAll("\\$", "").replaceAll("\\{", "").replaceAll("\\}", ""));
        strTemplate = strTemplate.replace(mat1.group(1), "(\\w*)");
    }

    if(wildcards!= null && wildcards.size() > 0)
    {
        Pattern pat2 = Pattern.compile(strTemplate);
        Matcher mat2 = pat2.matcher(strValue);

        if (mat2.find()) 
        {
            for(int i=0;i<wildcards.size();i++)
            {
                outputBuffer.append(wildcards.get(i)).append(" = ");
                outputBuffer.append(mat2.group(i+1));
                if(i != wildcards.size()-1)
                {
                    outputBuffer.append("; ");
                }
            }
        }
    }

    System.out.println(outputBuffer.toString());