D'accord avec @BalusC.
Je voudrais également souligner que ce que vous essayez de faire n'est pas vraiment "d'encodage" dans le sens normal de l'expression "encodage d'URL". L'encodage implique qu'il existe une étape de décodage inverse qui vous permettra de retrouver l'URL d'origine. Sauf si vous avez une règle métier qui exclut les caractères "-" (par exemple, des traits d'union si vous créez des noms d'URL à partir de "texte"), votre transformation ne sera pas réversible.
Ce que vous semblez faire est de transformer des chaînes d'URL en d'autres chaînes d'URL selon une règle qui n'est probablement pas réversible. Il n'est pas surprenant que la classe URLEncoder (qui implémente un encodage réversible standardisé) n'implémente pas votre transformation (spécifique à l'application). Comme le souligne @BalusC, l'approche correcte consiste à transformer les chaînes d'URL (en fonction des besoins de votre application) avant et de les encoder. En effet, il peut être préférable (par exemple, plus sûr) d'implémenter la transformation sur les composants de la chaîne d'URL ... avant d'assembler l'URL complète.
(Et je prends pour acquis que les URL sont utilisées dans un contexte qui nécessitent effectivement l'encodage mis en œuvre par URLEncoder.)