我们知道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
}
可以简化吗?可以用漂亮而简单的正则表达式替换它吗?
答案 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
话虽如此,如果我是你的同事,我会非常感谢你的第一个版本,而不是我的版本。