如何从 URL 字符串中提取主机名和端口?
How to extract hostname and port from URL string?
我需要从 URL 中提取主机名和端口(如果有),下面是我的代码:
val regEx = """^(?:https?:\/\/)?(?:www\.)?(.*?)\//""".r
val url = regEx.split("http://www.domain.com:8080/one/two")
val hostname = url(url.length - 1).split("/")(0).split(":")(0)
val hasPort = url(url.length - 1).split("/")(0).split(":").length > 1
val port = if (hasPort) url(url.length - 1).split("/")(0).split(":")(1) else 80
上面的代码按预期工作...但可以肯定的是,在 Scala 中有更好的方法来获得相同的结果。
如何在不使用那些难看的 split
的情况下获取主机名和端口(如果有)?
无需重新发明轮子,您可以简单地利用 java.net.URL
val url = new java.net.URL("http://www.domain.com:8080/one/two")
val hostname = url.getHost // www.domain.com
val port = url.getPort // 8080
一个细微的差别,getPort
returns -1
如果没有指定端口,那么你必须明确地处理这种情况。
val port = if (url.getPort == -1) url.getDefaultPort else url.getPort
我需要从 URL 中提取主机名和端口(如果有),下面是我的代码:
val regEx = """^(?:https?:\/\/)?(?:www\.)?(.*?)\//""".r
val url = regEx.split("http://www.domain.com:8080/one/two")
val hostname = url(url.length - 1).split("/")(0).split(":")(0)
val hasPort = url(url.length - 1).split("/")(0).split(":").length > 1
val port = if (hasPort) url(url.length - 1).split("/")(0).split(":")(1) else 80
上面的代码按预期工作...但可以肯定的是,在 Scala 中有更好的方法来获得相同的结果。
如何在不使用那些难看的 split
的情况下获取主机名和端口(如果有)?
无需重新发明轮子,您可以简单地利用 java.net.URL
val url = new java.net.URL("http://www.domain.com:8080/one/two")
val hostname = url.getHost // www.domain.com
val port = url.getPort // 8080
一个细微的差别,getPort
returns -1
如果没有指定端口,那么你必须明确地处理这种情况。
val port = if (url.getPort == -1) url.getDefaultPort else url.getPort