Scala:如何使用自定义协议解析URL

问题描述 投票:3回答:1

我需要解析可能包含不同于httphttps的协议的URL ...并且由于如果尝试使用类似java.net.URL的URL创建nio://localhost:61616对象,则构造函数崩溃,因此我已经实现了一些东西像这样:

def parseURL(spec: String): (String, String, Int, String) = {
  import java.net.URL

  var protocol: String = null

  val url = spec.split("://") match {
    case parts if parts.length > 1 =>
      protocol = parts(0)
      new URL(if (protocol == "http" || protocol == "https" ) spec else "http://" + parts(1))
    case _ => new URL("http" + spec.dropWhile(_ == '/'))
  } 

  var port = url.getPort; if (port < 0) port = url.getDefaultPort
  (protocol, url.getHost, port, url.getFile)
}

如果给定的URL包含不同于httphttps的协议,我将其保存在变量中,然后强制httpjava.net.URL解析它而不会崩溃。

是否有更优雅的方法来解决此问题?

scala url parse-url
1个回答
10
投票
new java.net.URI("nio://localhost:61616").getScheme() // returns nio

如果您想要更像Scala的API,可以签出https://github.com/lemonlabsuk/scala-uri

© www.soinside.com 2019 - 2024. All rights reserved.