【问题标题】:Add space before each Capitalized word (minus the 1st one) using Scala code使用 Scala 代码在每个大写单词(减去第一个)之前添加空格
【发布时间】:2016-12-11 03:52:10
【问题描述】:
我是Scala 的新手...到目前为止,我真的很喜欢它。 :)
现在我正在和Play Framework 一起玩,我很惊讶它是多么简单。
嗯...手头的问题是我想让一个字符串更易读:
UsersGroupedByRegistrationMonthYear.csv
输出应该是:
Users Grouped By Registration Month Year.csv
你能帮忙吗?
【问题讨论】:
标签:
regex
string
scala
string-matching
uppercase
【解决方案1】:
不是正则表达式,而是一种非常直接的方法。
val str = "UsersGroupedByRegistrationMonthYear.csv"
str.flatMap(c => if (c.isUpper) Seq(' ', c) else Seq(c)).trim
【解决方案2】:
您可以使用此正则表达式和 2 个捕获组进行搜索:
([a-z0-9])([A-Z])
并使用此模式替换:
$1 $2
RegEx Demo
代码:
repl = input.replaceAll("([a-z0-9])([A-Z])", "$1 $2");
【解决方案3】:
另一种方法是使用 String.split 和正则表达式环视,通过大写对字符串进行标记而不丢弃它们,然后将标记组合回一个字符串,标记之间有空格:
val in = "UsersGroupedByRegistrationMonthYear.csv"
val out = in.split("(?=[A-Z])").mkString(" ")
println("\"%s\"\nbecomes\n\"%s\"".format(in, out))
这会产生:
"UsersGroupedByRegistrationMonthYear.csv"
becomes
"Users Grouped By Registration Month Year.csv"