String str = "hai ${name} .... Welcome to ${sitename}....";
从这个str我需要用“jack”替换$ {name}而用“google”替换$ {sitename}
是否可以使用正则表达式?
或
有没有其他最快的方法来替换字符串。
已编辑:
name和sitename是str变量是动态的。
1.首先,我必须找到钥匙
例如:此处name , sitename
是关键
2.然后我有一个具有键值对的Hashmap
基于键值,我必须替换str
变量中的字符串。
答案 0 :(得分:1)
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Replacer
{
public static String replacePlaceHolders(String text)
{
Map<String, String> fields = new HashMap<>();
fields.put("name", "jack");
fields.put("sitename", "google");
Pattern p = Pattern.compile("\\$\\{(.*?)\\}");
Matcher matcher = p.matcher(text);
StringBuffer result = new StringBuffer();
while (matcher.find()) {
String key = matcher.group(1);
if (!fields.containsKey(key)) {
continue;
}
matcher.appendReplacement(result, fields.get(key));
}
matcher.appendTail(result);
return result.toString();
}
public static void main(String[] args)
{
System.out.println(
replacePlaceHolders("hai ${name} .... Welcome to ${sitename}...."));
}
}
答案 1 :(得分:1)
不需要正则表达式!
您可以迭代地图的keySet,然后执行以下操作:
str=str.replace("${"+key+"}", map.get(key));
关于方法:
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replace(java.lang.CharSequence,java.lang.CharSequence)
答案 2 :(得分:0)
我认为你最好使用String.format
String str = String.format("hai %s .... Welcome to %s....", name, site);
答案 3 :(得分:0)
也许这会对你有所帮助:
\$\{name+\}
将$ {name}更改为测试
- &GT; $ {name} trete $ {sitename} - &gt; test trete $ {sitename}
您必须转义此表达式才能在Java中使用:
\\$\\{name+\\}
答案 4 :(得分:0)
如果您可以将${name}
和${sitename}
替换为{0}
和{1}
,则可以使用MessageFormat。
String str = "hai {0} .... Welcome to {1}....";
String output = MessageFormat.format(str, new String[]{"jack","google"});