#java #regex #kotlin
#kotlin
Вопрос:
Допустим, у меня есть строка: "Test me"
.
как мне преобразовать его в: "Test me"
?
Я пытался использовать:
string?.replace("\s ", " ")
но, похоже, что \s
это незаконный escape в Kotlin.
Ответ №1:
replace
функция в Kotlin перегружена либо для шаблонов необработанных строк, либо для шаблонов регулярных выражений.
"Test me".replace("\s ", " ")
Это заменяет необработанную строку s
, в чем проблема.
"Test me".replace("\s ".toRegex(), " ")
Эта строка заменяет несколько пробелов одним пробелом.
Обратите внимание на явный toRegex()
вызов, который создает a Regex
из a String
, таким образом, указывая перегрузку с помощью Regex
шаблона as.
Существует также перегрузка, которая позволяет производить замену из совпадений. Например, чтобы заменить их первым встречающимся пробелом, используйте это:
"Testnn me".replace("\s ".toRegex()) { it.value[0].toString() }
Кстати, если операция повторяется, рассмотрите возможность удаления построения шаблона из повторяющегося кода для повышения эффективности:
val pattern = "\s ".toRegex()
for (s in strings)
result.add(s.replace(pattern, " "))
Комментарии:
1. С регулярным выражением иногда приятно использовать
"""
вместо"
для строки регулярного выражения, чтобы вам не приходилось экранировать содержимое регулярного выражения.