Мне нужно декодировать URI, содержащий строку запроса; ожидаемое поведение ввода/вывода выглядит примерно так:
abstract class URIParser
{
/** example input:
* something?alias=pos&FirstName=Foo+A%26B%3DC&LastName=Bar */
URIParser(String input) { ... }
/** should return "something" for the example input */
public String getPath();
/** should return a map
* {alias: "pos", FirstName: "Foo+A&B=C", LastName: "Bar"} */
public Map<String,String> getQuery();
}
Я пытался использовать java.net.URI, но кажется, что он декодирует строку запроса, поэтому в приведенном выше примере у меня остается «alias=pos&FirstName=Foo+A&B=C&LastName=Bar», поэтому возникает двусмысленность, является ли «&» разделителем запроса или символ в компоненте запроса.
Изменить: я только что попробовал URI.getRawQuery(), и он не выполняет кодировку, поэтому я могу разделить строку запроса с помощью &
, но что мне тогда делать? Javascript имеет decodeURIComponent, я не могу найти соответствующий метод в Джава.
Какие-либо предложения? Я бы предпочел не использовать какие-либо новые библиотеки.