从Scala中的主机名中提取标签

时间:2014-08-06 13:06:25

标签: regex string scala

我们知道hostname是以点分隔的标签。现在我写了一个函数来返回第一个或第二个标签,如下所示:

private def title(hostname: String) = hostname.split('.') match {
  case Array("www", label, _*) if !label.isEmpty => label
  case Array(label, _*) if !label.isEmpty => label
  case _ => hostname
}

可以简化吗?可以用漂亮而简单的正则表达式替换它吗?

1 个答案:

答案 0 :(得分:1)

更新

这是一个实现相同结果的oneliner:

private def title(hostname: String) =
 hostname.stripPrefix("www.").split('.').filter(_.nonEmpty).headOption.getOrElse(hostname)

我认为阅读非常清楚。

一些例子:

scala> title("www.google.com")
res21: String = google

scala> title("google.com")
res22: String = google

scala> title("www.")
res23: String = www.

这是一个正则表达式解决方案

private def title(hostname: String): String = {
  val p = "(?:www\\.)?(\\w+)".r
  (p findAllIn hostname).matchData collectFirst {
    case m => m.group(1)
  } getOrElse hostname
}

实施例

scala> title("www.google.com")
res1: String = google

scala> title("google.com")
res2: String = google

话虽如此,如果我是你的同事,我会非常感谢你的第一个版本,而不是我的版本。