在 StringSubstitutor 中支持大小写转换
Supporting case conversion in 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);
给予"I program in Java".
这很好用,但有时模板需要对替换变量进行一些转换,最常见的是转换其大小写。我真正想做的是允许 "I program in ${language:upper}" 或 "I program in ${upper(language)}" 的模式,这样上面的结果就是 "I program in JAVA"
所以我的问题是:
StringSubstitutor
是否已经支持此功能(如果支持,语法是什么)?;否则
- 有没有一种方法可以在
StringSubstitutor
之上构建以支持此功能?;或
- 是否有其他库可以满足我的需求?
这应该有效:
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"));
}
我正在使用 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);
给予"I program in Java".
这很好用,但有时模板需要对替换变量进行一些转换,最常见的是转换其大小写。我真正想做的是允许 "I program in ${language:upper}" 或 "I program in ${upper(language)}" 的模式,这样上面的结果就是 "I program in JAVA"
所以我的问题是:
StringSubstitutor
是否已经支持此功能(如果支持,语法是什么)?;否则- 有没有一种方法可以在
StringSubstitutor
之上构建以支持此功能?;或 - 是否有其他库可以满足我的需求?
这应该有效:
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"));
}