scala字符串替换模板

时间:2017-06-16 10:46:19

标签: scala string-interpolation

我知道scala有字符串插值,您可以执行以下操作:

s"${firstName} ${lastName}"

关于它的好处是,与string.format相比,搞砸的可能性更小,我可以搞砸像

这样的论点
"%s %s".format(lastName, firstName)

有没有办法将模板保存为变量并评估firstName和lastName的多个值?有点像:

val template = "${firstName} ${lastName}"
persons.map{case(firstName, lastName) => 
//substitute template here
}

由于

2 个答案:

答案 0 :(得分:1)

如果你想重复使用模式,那么简单的方法就是围绕它创建一个函数

def format(firstName: String, lastName:String) = s"${firstName} ${lastName}"

persons.map{case(firstName, lastName) =>
  format(firstName,lastName)
}

漫长的方法是将模式解析为StringContext,如this question

答案 1 :(得分:0)

如何使用 Regex 提取数据,例如:

  val R = "(\\w+) (\\w+)".r
  val (firstName, lastName) = "hello world" match {
    case R(a, b) => (a, b)
  }

  println(firstName)
  > hello
  println(lastName)
  > world

了解详情:

http://www.scala-lang.org/api/2.12.1/scala/util/matching/Regex.html