0
String str = "hai ${name} .... Welcome to ${sitename}....";

从这个str我需要用“jack”替换${name},用“google”替换${sitename}

可以用正则表达式吗?

或者

有没有其他最快的方法来替换字符串。

编辑:

name 和 sitename 是 str 变量是动态的。

1.所以首先我必须找到钥匙。
例如:这name , sitename是关键
2。然后我有一个具有键值对的 Hashmap。
基于键值,我必须替换str变量中的字符串。

4

5 回答 5

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)

于 2013-09-27T12:44:54.047 回答
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}...."));
    }
}
于 2013-09-27T12:43:18.073 回答
0

我认为你最好使用String.format

String str = String.format("hai %s .... Welcome to %s....", name, site);
于 2013-09-27T12:36:15.373 回答
0

如果您可以替换and${name}并且您可以使用MessageFormat${sitename}{0}{1}

String str = "hai {0} .... Welcome to {1}....";
String output = MessageFormat.format(str, new String[]{"jack","google"});
于 2013-09-27T12:57:47.717 回答
0

也许这会帮助你:

\$\{name+\}

将 ${name} 更改为测试

-> ${name} trete ${sitename} -> 测试trete ${sitename}

您必须转义此表达式才能在 Java 中使用:

\\$\\{name+\\}
于 2013-09-27T12:53:44.103 回答