代码之家  ›  专栏  ›  技术社区  ›  beldaz Nicolas W.

字符串替换器中的支持事例转换

  •  1
  • beldaz Nicolas W.  · 技术社区  · 6 年前

    我在用 StringSubstitutor 在用户定义的模板(如“i program in$language”)之后完成字符串。

    Map valuesMap = HashMap();
    valuesMap.put("language", "Java");
    String templateString = "I program in ${language}.";
    StrSubstitutor sub = new StrSubstitutor(valuesMap);
    String resolvedString = sub.replace(templateString);
    

    给出“我在Java中的程序”。

    这很有效,但有时模板需要包含替换变量的一些转换,通常是为了转换其大小写。我真正想做的是允许“i在{{Language:上图}”或“i程序中${Language(语言)}”中的模式,这样从上面得到的结果将是“我在Java中编程”。

    所以我的问题是:

    1. 字符串替换器 已经支持这个(如果支持,语法是什么)?否则
    2. 有什么方法可以建立在 字符串替换器 要支持此功能?或;或
    3. 有没有其他的图书馆可以满足我的要求?
    1 回复  |  直到 6 年前
        1
  •  1
  •   Coder-Man    6 年前

    valuesMap.put("language:lower", "java");
    valuesMap.put("language:upper", "JAVA");
    

    void put(HashMap hashMap, String key, String value) {
        hashMap.put(key + ":lower", value.toLowerCase());
        hashMap.put(key + ":upper", value.toUpperCase());
    }
    

    class MyHashMap extends HashMap {
        @Override
        public Object put(Object key, Object value) {
            String strKey = (String)key;
            String strValue = (String)value;
            super.put(strKey + ":lower", strValue.toLowerCase());
            super.put(strKey + ":upper", strValue.toUpperCase());
            return strKey;
        }
    }
    

    public static void main(String[] args) {
        MyHashMap myHashMap = new MyHashMap();
        myHashMap.put("test", "test");
        System.out.println(myHashMap.get("test:lower"));
        System.out.println(myHashMap.get("test:upper"));
    }