首页 > 解决方案 > 在 StringSubstitutor 中支持大小写转换

问题描述

我正在使用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 编程”。

这很好用,但有时模板需要包含一些替换变量的转换,最常见的是转换它的大小写。我真正想做的是允许类似于“我用 ${language:upper} 编程”或“我用 ${upper(language)} 编程”这样的模式,这样上面的结果就是“我编程在 JAVA 中"

所以我的问题是:

  1. 是否StringSubstitutor已经支持这个(如果支持,语法是什么)?否则
  2. 有没有办法在此基础上StringSubstitutor支持此功能?或者
  3. 是否有其他可用的库可以满足我的需求?

标签: javatextapache-commonssubstitutionuppercase

解决方案


这应该有效:

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

您可以编写一个函数来确保将两个变体都放入 HashMap。

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

您还可以扩展 HashMap,如下所示:

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

推荐阅读