2016-12-11 11 views
1

Я новичок в Scala ... пока мне это очень нравится. :)Добавить пробел перед каждым заглавным словом (минус 1-й) с помощью кода Scala

Прямо сейчас я играю с Play Framework, и я поражен тем, как легко это происходит.

Ну ... проблема под рукой, что я хотел бы сделать строку как следующий один более читаемым:

UsersGroupedByRegistrationMonthYear.csv 

Вывод должен быть:

Users Grouped By Registration Month Year.csv 

Может вам помочь?

ответ

3

Не регулярное выражение, а довольно простой подход вперед.

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"); 
2

Одним из вариантов является использование регулярных выражений String.split с lookarounds чтобы разметить вашу строку заглавными буквами, не выбрасывать их, а затем объединить маркеры обратно в строку с пробелами между маркерами:

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"