-2

我正在编写一个程序,允许用户输入变量名,然后他们可以在其他字符串中使用。例如,如果用户输入:

$token aslkdjfna98y

为键“token”和值“aslkdjfna98y”创建映射。然后,我想通过指定应该使用以下语法将其换出,从而在 URL 中添加此令牌变量:

http://www.example.com/getThing?token=$^{token}

所以在这里,我想$^{token}用我的映射值aslkdjfna98y进行交换。

我尝试了各种String.replaceString.replaceAll调用,但是我目前陷入了一个循环 - 已知字符串包含文本$^{token},但我无法替换文本。这是我苦苦挣扎的地方:

if (request.contains("$^{"))
    {
        //handle variables
        for (String s : variables.keySet())
        {
            String str = String.format(Locale.US, "$^{%s}", s);
            while(request.contains(str))
            {
                //Stuck Here
                request = request.replace(String.format(Locale.US, "$^{%s}", s), variables.get(s));
            }
        }
    }

理想情况下,这可以简化为:

request.replaceAll(regex, str);

如何正确替换字符,或者如何改进它以使用replaceAll

4

3 回答 3

4

将字符串括在\\Q和中\\E。这将关闭 Java 正则表达式中的所有特殊字符:

request = request.replace(String.format(Locale.US, "\\Q$^{%s}\\E", s), variables.get(s));    
于 2013-08-29T20:46:21.777 回答
0

我能够将代码简化为这个简单的块:

if (variables.get(s) != null) {
    request = request.replaceAll(Log.format("\\Q$^{%s}\\E", s), variables.get(s));
}
else {
    Log.err("No variable \"%s\" set", s);
}
于 2013-08-29T21:02:23.580 回答
0
"$^{token}"

我很困惑令牌字段中的内容...

任何字母/数字?

"$^{[a-zA-Z0-9]*}"

嗯……

一定数量(8)的字母/麻木。

"$^{[a-zA-Z0-9]{8}}"

根据您使用的语言,您可能需要转义 { $ 和 ^

于 2013-08-29T20:46:41.550 回答