-2

ユーザーが他の文字列で使用できる変数名を入力できるようにするプログラムを作成しています。たとえば、ユーザーが次のように入力した場合:

$token aslkdjfna98y

キー「token」と値「aslkdjfna98y」のマッピングが作成されます。次に、この構文を使用してスワップ アウトする必要があることを指定して、このトークン変数を URL に追加します。

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

ここで$^{token}、マップされた値aslkdjfna98yと交換したいと思います。

String.replaceさまざまなString.replaceAll呼び出しを試しましたが、現在ループに陥っています.Stringにテキスト$^{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

Enclose the String in \\Q and \\E. This switches off all special characters in Java regexes:

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

トークンフィールドにあると思われるものを混乱させています...

任意の文字/数字?

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

うーん.....

一定量(8)の文字/麻痺。

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

使用している言語によっては、{ $ と ^ をエスケープする必要がある場合があります

于 2013-08-29T20:46:41.550 に答える