Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java替换$^{}_Java_Regex_String - Fatal编程技术网

Java替换$^{}

Java替换$^{},java,regex,string,Java,Regex,String,我正在编写一个程序,允许用户输入变量名,然后在其他字符串中使用。例如,如果用户输入: $token aslkdjfna98y 为键“token”和值“aslkdjfna98y”创建映射。然后,我想通过指定应使用以下语法将此令牌变量交换出去,将其添加到URL中: http://www.example.com/getThing?token=$^{token} 所以在这里,我想用映射值aslkdjfna98y交换$^{token} 我尝试了各种String.replace和String.repla

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

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

http://www.example.com/getThing?token=$^{token}
所以在这里,我想用映射值aslkdjfna98y交换
$^{token}

我尝试了各种
String.replace
String.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

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

request = request.replace(String.format(Locale.US, "\\Q$^{%s}\\E", s), variables.get(s));    
我不知道令牌字段中应该是什么

有字母/数字吗

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

一定数量的字母/数字

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

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

我能够将代码简化为以下简单块:

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);
}

谢谢。我以后肯定会用这个!我也意识到最简单的一点——我在执行替换后不会重新分配请求。为什么会有这么多否决票?如果至少有人解释一下,我会很感激的……几乎可以肯定,因为你基本上说“我自己都懒得读这个”。。。
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);
}