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