0

我正在使用播放框架 2.2.1,并且我有一个关于在视图模板中操作字符串的问题。不幸的是,我对 Scala 编程语言及其 API 都不是很熟悉。字符串包含在一个列表中,该列表从控制器传递到视图,然后我使用循环来处理每个字符串,然后再将它们添加到 html 中。我想知道如何执行以下操作:修剪、toLowerCase 和删除空格。例如,如果我有“我的字符串”,我想生成“我的字符串”。更具体地说,我实际上想制作“myString”,但是如果有人指出我正确的方向,我相信我可以弄清楚。谢谢。

更新:

Fiaz 提供了一个很好的解决方案,基于他的答案,只是为了兴趣,我使用递归提出了以下解决方案。这个例子当然是对所提供的输入做出了许多假设。

@formatName(name: String) = @{  
  def inner(list: List[String], first: Boolean): String = {
    if (!list.tail.isEmpty && first) list.head + inner(list.tail, false)
    else if (!list.tail.isEmpty && !first) list.head.capitalize + inner(list.tail, false)
    else if (list.tail.isEmpty && !first) list.head.capitalize
    else list.head                  
  } 
  if (!name.trim.isEmpty) inner(name.split(' ').map(_.toLowerCase).toList, true)        
  else ""
}
4

2 回答 2

3

如果您想知道如何在没有空格的情况下进行修剪、小写和连接,不妨试试这个?

// Given that s is your string
s.split(" ").map(_.toLowerCase).mkString

将一个字符串拆分为一个数组字符串,拆分是在一个或多个空格上完成的,以便为您提供修剪后的字符串。然后,您map将数组中的每个元素与函数(x => x.toLowerCase)(简写为)一起使用,然后使用集合具有(_.toLowerCase)的方法将数组连接回单个字符串。mkString

因此,假设您要将每个空格分割位的第一个字母大写:

Scalacapitalize在字符串上提供了一种方法,因此您可以使用它:

s.split(" ").map(_.toLowerCase.capitalize).mkString

http://www.scala-lang.org/api/current/scala/collection/immutable/StringOps.html

关于如何获得您描述的确切输出(您的示例“myString”)的一项建议:

(s.split(" ").toList match { 
   case fst::rest => fst.toLowerCase :: rest.map(_.toLowerCase.capitalize)
   case Nil => Nil }
).mkString
于 2013-11-13T02:57:55.330 回答
1

下面是使用字符串操作的示例:

@stringFormat(value: String) = @{
 value.replace("'", "\\'")
}

@optionStringFormat(description: Option[String]) = @{
  if (description.isDefined) {
      description.get.replace("'", "\\'").replace("\n", "").replace("\r", "")
  } else {
    ""
  }
}

@for(photo <- photos) {
    <div id="photo" class="random" onclick="fadeInPhoto(@photo.id, '@photo.filename', '@stringFormat(photo.title)', '@optionStringFormat(photo.description)', '@byTags');">

这个例子来自https://github.com/joakim-ribier/play2-scala-gallery

于 2013-11-13T06:23:42.693 回答