我将得到包含格式化“属性”的字符串;也就是说,封装在标准“${”和“}”标记内的字符串:
“这是我可能是 ${given} 的 ${string} 的 ${example}。”
我还将HashMap<String,String>
对每个可能的格式化属性进行包含替换:
HashMap Keys HashMapValues
===========================================
bacon eggs
ham salads
因此,给定以下字符串:
“我喜欢吃${bacon}和${ham}。”
我可以将其发送到一个 Java 方法,该方法将其转换为:
“我喜欢吃鸡蛋和沙拉。”
这是我最好的尝试:
System.out.println("Starting...");
String regex = "$\\{*\\}";
Map<String,String> map = new HashMap<String, String>();
map.put("bacon", "eggs");
map.put("ham", "salads");
String sampleString = "I like ${bacon} and ${ham}.";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(sampleString);
while(matcher.find()) {
System.out.println("Found " + matcher.group());
// Strip leading "${" and trailing "}" off.
String property = matcher.group();
if(property.startsWith("${"))
property = property.substring(2);
if(property.endsWith("}"))
property = property.substring(0, property.length() - 1);
System.out.println("Before being replaced, property is: " + property);
if(map.containsKey(property))
property = map.get(property);
// Now, not sure how to locate the original property ("${bacon}", etc.)
// inside the sampleString so that I can replace "${bacon}" with
// "eggs".
}
System.out.println("Ending...");
当我执行此操作时,我没有收到任何错误,但只看到“开始...”和“结束...”输出。这告诉我我的正则表达式不正确,因此Matcher
无法匹配任何属性。
所以我的第一个问题是:这个正则表达式应该是什么?
一旦我过去了,一旦我将“$ {bacon}”更改为“eggs”等,我不确定如何执行字符串替换。有什么想法吗?提前致谢!