我有这样一个字符串:“嗨,$ namevar $,你好吗?”。我想要:
对于1)我正在使用以下代码:
String my = "hi $namevar$ how are you?";
Matcher m = Pattern.compile("\\$(\\w.*?)\\$").matcher(my);
while (m.find()) {
System.out.println(m.group(1));
}
有2)和3)的提示吗?
这是一种更通用的方法,不需要您提供模式,即可用于多个占位符,也可以在多个单词上匹配占位符。说,我们有以下模板和输入字符串:
String input = "Hi John Doe, how are you? I'm Jane.";
String template = "Hi $namevar$, how are you? I'm $namevar2$.";
因此,我们解析所有占位符名称,并将其添加到Map
第一个。我们使用aMap
以便以后可以将实际String
值分配为键。
Matcher m = Pattern.compile("\\$(\\w*?)\\$").matcher(template);
Map<String, String> vars = new LinkedHashMap<String, String>();
while (m.find()) {
System.out.println(m.group(1));
vars.put(m.group(1), null);
}
现在,我们生成模式解析占位符值
String pattern = template;
// escape regex special characters
pattern = pattern.replaceAll("([?.])", "\\\\$1");
for (String var : vars.keySet()) {
// replace placeholders with capture groups
pattern = pattern.replaceAll("\\$"+var+"\\$", "([\\\\w\\\\s]+?)");
}
现在,我们进行匹配并捕获占位符值。然后将这些值存储在Map
上面创建的相同值中,并分配给它们相应的占位符变量。
m = Pattern.compile(pattern).matcher(input);
if (m.matches()) {
int i = 0;
for (String var : vars.keySet()) {
vars.put(var, m.group(++i));
}
}
现在,让我们通过遍历Map
as来打印捕获的值
for (Map.Entry<String, String> entry : vars.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
输出:
namevar = John Doe
namevar2 = Jane
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句