替换String中的变量

时间:2015-12-02 06:44:48

标签: java

我正在寻找一个String Utils,以便我可以做这样的事情。

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

输出:这是11/11/11的结束。

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

输出:这是10/10/10的开始。

2 个答案:

答案 0 :(得分:5)

使用标准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});

答案 1 :(得分:0)

你真的需要作为传入参数" array" ?如果没有,那么你可以轻松实现..

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

(你可以很容易地修改它以引入params数组,但更好的应该是例如.Map-key变量,值"占位符" - $ var)的新值

阵列变体:

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;
}

更好的地图变体:

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;
}

(这可以普遍用于任何事情)