2012-02-20 2 views
0

У меня есть строка, root?param1=...&param2=...&param3=..., и я хочу создать java-метод, который удалит любые повторяющиеся параметры. Значения всегда будут одинаковыми, но иногда параметры дублируются в соответствии с функцией приложения (не спрашивайте). Для этого,Каков наилучший способ удаления повторяющихся параметров URI из строки?

HTTP://root?param1=value&param2=value2&param2=value2param3=value3&param3=value3&param1=value&param1=value 

становится

HTTP://root?param1=value&param2=value2&param3=value3 

Я был вне программирования слишком долго, чтобы вспомнить лучшие способы сделать это, но мой первоначальный ход мысли пошел что-то вроде этого:

Grab каждый параметр и вставить в массив temp, запустить через temp array и сравнить, если array [i] равен любому другому имени параметра. Если да, удалите. Если нет, добавьте обратно в возвращаемую строку. В конце цикла верните строку возврата.

Но для этого потребуется O (n) для длины URI плюс O (m)! для размера массива (m - количество параметров). Я думаю, что это было бы неплохо, учитывая, что я буду использовать этот метод около 5000 x в минуту для всех входящих URI. Есть ли лучший способ сделать это или из готового java-метода, который обрабатывает некоторые из служебных данных?

+2

вам действительно нужно сделать, что ли? Не может ли получатель URL-адреса просто игнорировать дубликат (это то, что большинство реализаций уже делают, если вы явно не просматриваете многозначные параметры)? – Thilo

+0

Как я хочу отслеживать список URL-адресов. Некоторые страницы имеют одно и то же действие, но могут иметь разные URL-адреса (варьируя просто по количеству повторяющихся параметров), и я предпочел бы иметь одну страницу для данного действия, чем дюжину. – user625032

ответ

1

Вы можете вставлять пары ключ/значение в Map<String,String>. Это автоматически позаботится о дублированных ключах и будет очень легко скопировать код.

Чтобы убедиться, что параметры с идентичными ключами имеют одинаковые значения, вы можете проверить возвращаемое значение put(): оно должно быть либо null, либо равно значению, которое вы только что вставили.

+0

А, отлично, я забыл об этом. Хорошее шоу! – user625032

0

Если вы настаиваете на этом (не?), Вы можете использовать Map.

Для каждой из ваших пар параметров - значений вставьте их в карту.

У вас останутся только уникальные параметры, которые затем можно использовать для восстановления вашего URI.

Вы должны повторять пару параметров - значение один раз, а затем повторить свою карту один раз, чтобы перестроить URI.

Или, как сказал Тило, вы не могли сделать этого и позволить получателю разобраться с дубликатами.

Смежные вопросы