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

Скажем, у меня строка: "Test me".

как его преобразовать в: "Test me"?

Я пробовал использовать:

string?.replace("\\s+", " ")

но оказывается, что \\s является незаконным побегом в Котлине.

Ответ 1

функция replace в Kotlin имеет перегрузки для шаблонов необработанных строк и регулярных выражений.

"Test  me".replace("\\s+", " ")

Это заменяет необработанную строку \s+, что является проблемой.

"Test  me".replace("\\s+".toRegex(), " ")

Эта строка заменяет несколько пробелов одним пространством. Обратите внимание на явную toRegex() вызов, который делает Regex из String, таким образом, определяя перегрузку с Regex в качестве шаблона.

Там также есть перегрузка, которая позволяет вам производить замену матчей. Например, чтобы заменить их первым встреченным пробелом, используйте это:

"Test\n\n  me".replace("\\s+".toRegex()) { it.value[0].toString() }


Кстати, если операция повторяется, рассмотрите возможность перемещения структуры шаблона из повторяющегося кода для повышения эффективности:
val pattern = "\\s+".toRegex()

for (s in strings)
    result.add(s.replace(pattern, " "))