Saltar al contenido

Java: ¿forma común de validar y convertir “host: puerto” a InetSocketAddress?

este problema se puede resolver de diferentes maneras, sin embargo te damos la respuesta más completa para nosotros.

Solución:

Yo mismo propongo una posible solución alternativa.

Convertir un string en URI (esto lo validaría automáticamente) y luego consultar los componentes de host y puerto de URI.

Lamentablemente, un URI con un componente host DEBE tener un esquema. Es por eso que esta solución “no es perfecta”.

String string = ... // some string which has to be validated

try  catch (URISyntaxException ex) 
  // validation failed

Esta solución no necesita costumbre string analizandofunciona con IPv4 (1.1.1.1:123), IPv6 ([::0]:123) y nombres de host (my.host.com:123).

Accidentalmente, esta solución es adecuada para mi escenario. Iba a usar esquemas URI de todos modos.

Una expresión regular hará esto bastante bien:

Pattern p = Pattern.compile("^\s*(.*?):(\d+)\s*$");
Matcher m = p.matcher("127.0.0.1:8080");
if (m.matches()) 
  String host = m.group(1);
  int port = Integer.parseInt(m.group(2));

Puede hacer esto de muchas maneras, como hacer que el puerto sea opcional o realizar alguna validación en el host.

No responde la pregunta exactamente, pero esta respuesta aún podría ser útil para otros como yo que solo quieren analizar un host y un puerto, pero no necesariamente un completo InetAddress. Guava tiene una clase HostAndPort con un parseString método.

Si tienes algún titubeo o forma de acrecentar nuestro post te sugerimos añadir un exégesis y con gusto lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *