Согласна с @ BalusC.
Я также хотел бы отметить, что то, что вы пытаетесь сделать, на самом деле не является «кодированием» в обычном смысле фразы «кодировка URL». Кодирование подразумевает, что существует шаг обратного декодирования, который вернет вам исходный URL. Если у вас нет бизнес-правила, которое исключает символы «-» (например, дефисы, если вы создаете имена URL из «текста»), ваше преобразование не будет обратимым.
То, что вы делаете, - это преобразовывает строки URL в другие строки URL в соответствии с некоторым правилом, которое, вероятно, необратимо. Совсем не удивительно, что класс URLEncoder (который реализует определенную стандартизированную обратимую кодировку) не реализует ваше (специфичное для приложения) преобразование.
Как указывает @BalusC, правильный подход заключается в преобразовании строк URL (в соответствии с потребностями вашего приложения) до того, как вы их закодируете. Действительно, может быть лучше (например, безопаснее) реализовать преобразование для компонентов строки URL-адреса ... перед сборкой полного URL-адреса.
(И я считаю само собой разумеющимся, что URL-адреса используются в контексте, который фактически требует кодировки, реализованной URLEncoder.)