使用正则表达式查找字符串以$符号开头

时间:2013-09-27 12:33:26

标签: java regex

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

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

是否可以使用正则表达式?

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

已编辑:

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

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

5 个答案:

答案 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"});