Как мне заменить повторяющиеся пробелы в строке в Kotlin?

#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. С регулярным выражением иногда приятно использовать """ вместо " для строки регулярного выражения, чтобы вам не приходилось экранировать содержимое регулярного выражения.