3

使用 Google Guava 是否有 String 实用程序可以轻松替换内部的字符串字段,如下所示:

String query = mydb..sp_mySP ${userId}, ${groupId}, ${someOtherField}

我可以在哪里做这样的事情:

StringUtil.setString(query)
   .setField("userId", "123")
   .setField("groupId", "456")
   .setField("someOtherField", "12-12-12");

然后生成的字符串将是:

mydb..sp_mySP 123, 456, 12-12-12

当然,像${<field>}操作之前一样设置字符串字段模式...

无论如何,这是我的方法:

public class StringUtil {
    public class FieldModifier {
        private String s;
        public FieldModifier(String s){
            this.s = s;
        }
        public FieldModifier setField(String fieldName, Object fieldValue){
            String value = String.valueOf(fieldValue);
            s = modifyField(s, fieldName, value);
            return new FieldModifier(s); 
        }
        public String get() {
                return s;
        }
        private String modifyField(String s, String fieldName, String fieldValue){
            String modified = "";
            return modified;
        }
    }
    public FieldModifier parse(String s){
        FieldModifier fm = new FieldModifier(s);
        return fm; 
    }
}

因此,在这种情况下,我只需将实际代码放入modifyField将直接修改字符串的函数中。另外,如果有一种方法可以使parse函数成为静态的,那么我可以不做StringUtil.parse(...)new StringUtil().parse(...)这看起来确实不太好。

4

3 回答 3

3

是的,String.format()

String s = "Hey %s! Cool %s, right?";
System.out.println(String.format(s, "xybrek", "feature"));
于 2012-09-13T09:08:31.637 回答
3

番石榴中没有这样的东西。您可以查看可以进行字符串模板的SpEL(Spring 表达式语言)或其他模板框架,例如VelocityFreemarker

于 2012-09-13T09:13:40.553 回答
2

使用番石榴?不。

尽管最近要求增强以支持此功能(请参阅此处)。

无论如何,使用 Apache Commons Lang 的StrSubstitutor仍然是可行的。

于 2012-09-13T09:39:37.707 回答