【问题标题】:Supporting case conversion in StringSubstitutor在 StringSubstitutor 中支持大小写转换
【发布时间】:2018-07-27 21:41:42
【问题描述】:

我正在使用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. 是否有其他可用的库可以满足我的需求?

【问题讨论】:

    标签: java text apache-commons substitution uppercase


    【解决方案1】:

    这应该可行:

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

    【讨论】:

    • 这是一个好的开始,但在很多情况下我不知道地图中会出现哪些条目。但我想我可以使用这种方法来解析以:upper 结尾的任何内容的模板字符串...
    • @beldaz 你也可以把没有 ":upper" 和 ":lower" 的正常值放到地图中,或者在你的扩展 HashMap 中创建另一个放置函数,它不会放入上、下,以及您拥有的其他案例。
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2018-08-17
    • 2013-01-25
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多