如何获得scala中每个单词的第一个字母?

Com*_*der 8 scala

如果我有"纽约市"这个短语,我如何得到每个单词的第一个字母?我的谷歌搜索只向我展示了如何将每个单词中的第一个字母大写,这看起来与我正在尝试的不同.

鉴于我对Scala的了解有限,我可能会在程序上做到这一点,但我希望有人能够对我提供一些Scala知识,并向我展示一个描述这个问题的功能方法的例子.

Deb*_*ski 24

所有其他版本工作正常,但为了避免格式错误的字符串失败(连续两个空格,空字符串),使用

"New York City".split(" ").flatMap(_.headOption).mkString
Run Code Online (Sandbox Code Playgroud)

这也适用于

"New  York  City".split(" ").flatMap(_.headOption).mkString
Run Code Online (Sandbox Code Playgroud)

甚至

"".split(" ").flatMap(_.headOption).mkString
Run Code Online (Sandbox Code Playgroud)

正如dhg所建议的那样,人们可能也希望使用更合适的正则表达式"\\s+".但是,人们也可以使用更合适的东西:

"""\w+""".r.findAllIn("New  York  City").map(_.head).mkString
Run Code Online (Sandbox Code Playgroud)

(在这里/\w+/应该希望我们免受病态情况的影响,以便我们可以使用该.head版本.)

  • `"纽约市".split("\\ s +").map(_.head).mkString`在没有"Option"的情况下完成相同的目标. (3认同)
  • @dhg ...但是空字符串失败了. (2认同)

Iva*_*ith 13

scala> "New York City".split(" ").map(_.head).mkString
res5: String = NYC
Run Code Online (Sandbox Code Playgroud)

这将""分成一个单词数组.然后我们映射该数组并调用String.head获取第一个字符.


Bri*_*ian 5

"New York City".split(" ").toList.map(_(0))
Run Code Online (Sandbox Code Playgroud)

给出了人物:

List[Char] = List(N, Y, C)
Run Code Online (Sandbox Code Playgroud)

如果你想要一个字符串使用mkStringList[Char]:

"New York City".split(" ").toList.map(_(0)) mkString
Run Code Online (Sandbox Code Playgroud)

要得到:

String = NYC
Run Code Online (Sandbox Code Playgroud)