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.