java - 在 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 中"
所以我的问题是:
- 是否
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"));
}
推荐阅读
- c++ - 可扩展的 SFINAE 条件覆盖
- java - 如何从一个线程调用方法但让另一个线程在 Java 中执行该方法?
- javascript - React 中的条件状态
- saml-2.0 - 我对 SAML 会话管理和单一注销选项 (SLO) 有疑问
- python - SpaCy:Doc 在被删除后如何继续存在和工作?
- azure - 添加 SQL 防火墙规则时的 Azure 警报
- postgresql - 为什么这个查询返回更多的值然后它应该
- azure - Microsoft graph rest api v1.0:访问B2C租户用户
- android - 我可以将 tawk.to 集成到我的 Flutter 应用的导航栏中吗?
- python - 如何使用 glob 在多个子文件夹中搜索特定类型的所有文件?