2013-08-29 31 views
-2

我正在编写一个程序,允许用户输入变量名称,然后可以在其他字符串中使用它们。例如,如果用户输入:对键“令牌”和值“aslkdjfna98y”创建

$token aslkdjfna98y 

的映射。然后我想通过指定它应该使用的语法被换出在URL中添加此令牌变量:

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

所以在这里,我想换$^{token}我的映射值aslkdjfna98y

我曾尝试过各种String.replaceString.replaceAll电话,但我目前陷在一个循环 - 在那里它被称为该字符串包含文本$^{}令牌,但我不能代替文字。这里就是我奋力:

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

+0

为什么所有降价?如果至少有人解释,我将不胜感激...... – Phil

+1

几乎可以肯定,因为你基本上已经说过“我不能为这个自己读过这些东西而烦恼......” –

回答

4

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

request = request.replace(String.format(Locale.US, "\\Q$^{%s}\\E", s), variables.get(s));  
+0

谢谢。我将来肯定会使用它!我也意识到,最简单的 - 执行替换后我不重新分配*请求*。 – Phil

0
"$^{token}" 

IM困惑什么假设是在令牌场...

任何字母/ NUM?

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

庵.....

一定量的(8)的信/麻木。

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

根据语言使用的是你可能需要逃避{$和^

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