Вы также можете использовать Google Guava's Splitter.
String queryString = "variableA=89&variableB=100";
Map<String,String> queryParameters = Splitter
.on("&")
.withKeyValueSeparator("=")
.split(queryString);
System.out.println(queryParameters.get("variableA"));
распечатывает
89
Я думаю, что это очень удобная альтернатива анализу самостоятельно.
Редактировать: как указал @raulk, это решение не учитывает экранированные символы.Однако это может не быть проблемой, поскольку перед URL-декодированием строка запроса гарантированно не содержит экранированных символов, конфликтующих с «=» и «&».Вы можете использовать это в своих интересах следующим образом.
Скажите, что вы должны декодировать следующую строку запроса:
a=%26%23%25!)%23(%40!&b=%23%24(%40)%24%40%40))%24%23%5E*%26
, которая закодирована в URL, тогда вам гарантировано, что '&'и' = 'специально используются для отделения пар и ключа от значения, соответственно, в этот момент вы можете использовать разделитель Guava для получения:
a = %26%23%25!)%23(%40!
b = %23%24(%40)%24%40%40))%24%23%5E*%26
Как только вы получили пары ключ-значение, тогдаВы можете URL декодировать их отдельно.
a = &#%!)#(@!
b = #$(@)$@@))$#^*&
Это должно охватывать все случаи.