如何从URL字符串中提取主机名和端口?

j3d*_*j3d 0 regex scala

我需要从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
Run Code Online (Sandbox Code Playgroud)

上面的代码按预期工作...但在Scala中肯定有更好的方法来获得相同的结果.

如何在不使用所有丑陋的splits的情况下获取主机名和端口(如果有的话)?

Gab*_*lla 9

没有重新发明轮子,你可以简单地利用 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
Run Code Online (Sandbox Code Playgroud)

如果没有指定端口,则getPort返回次要差异,-1因此必须明确处理该情况.

val port = if (url.getPort == -1) url.getDefaultPort else url.getPort
Run Code Online (Sandbox Code Playgroud)