2013-08-29 60 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); 
}