简体   繁体   English

替换字符串中的变量

[英]Replace a variable in a String

I am looking for a String Utils so that I can do something like this. 我正在寻找一个String Utils,以便我可以做这样的事情。

String input = "this is the $var on $date"
someUtil.evaluate(input, [var: "end", date: "11/11/11"])

output : this is the end on 11/11/11. 输出:这是11/11/11的结尾。

someUtil.evaluate(input, [var: "start", date: "10/10/10"])

output : this is the start on 10/10/10. 输出:这是从10/10/10开始。

Use standard java MessageFormat , it is quite powerfull (read its class level JavaDoc) 使用标准的Java MessageFormat ,它非常强大(阅读其类级别的JavaDoc)

Date endDate = new GregorialCalendar(2011, Calendar.NOVEMBER, 11).getTime();
...
MessageFormat.format(
      "this is the {0} on {1,date,yy/MM/dd}",
      new Object[]{"end", endDate});

Do you really need as incoming parameter that "array" ? 您是否真的需要“数组”作为传入参数? If not, that you can implement as easy as it is .. 如果没有,那么您可以实现它的简单..

private static String replaceVarByVal(String toReplace,String var,String val){
        return toReplace.replace(var, val);
}

(You can easy modify that to incom params arrays, but better should be eg. Map- key variable, value new value of the "placeholder" - $var) (您可以轻松地将其修改为incom params数组,但更好的方法应该是例如Map-key变量,“占位符”的新值-$ var)

Arrays variant: 数组变体:

private static String replaceVarByVal(String toReplace,String[] var,String[] val){
        String toRet = toReplace;
        //arrays logic problem 
        if(var.length != val.length){
            return null;
        }else{
            for (int i = 0; i < var.length; i++) {
                toRet = toRet.replace(var[i], val[i]);
            }
        }
        return toRet;
}

Better variant with map: 地图的更好变体:

private static String replaceVarByVal(String toReplace,Map<String, String> paramValsMap){
        String toRet = toReplace;
        for (Map.Entry<String, String> entry : paramValsMap.entrySet())
        {
            toRet=toRet.replace(entry.getKey(), entry.getValue());
        }
        return toRet;
}

(And that can be used universally for anything) (并且可以普遍用于任何事物)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM