Как заменить часть элементов из строки в kotlin?

Есть строка в виде +7 (960) 454 343 88. Каким образом можно заменить часть элементов на символ #, чтобы по итогу получилось +7 (960) ## ##3 88 ?

Метод replaceRange заменяет все элементы одним символом с учетом пробелов


Ответы (2 шт):

Автор решения: Эникейщик

Применим грязный хак под названием... не знаю, под каким названием, просто применим без названия:

val new_text = text.replaceRange(9, 15, "## ##")
→ Ссылка
Автор решения: Alex_Skvortsov

Написал более общий вариант

    fun String.replaceCharsByCondition(
        with: Char,
        startIndexInclusive: Int,
        endIndexExclusive: Int,
        condition: (Char) -> Boolean
    ): String {
        val newStringBuilder = StringBuilder()
        forEachIndexed { i, char ->
            if (condition(char) && i >= startIndexInclusive && i < endIndexExclusive) {
                newStringBuilder.append(with)
            } else {
                newStringBuilder.append(char)
            }
        }
        return newStringBuilder.toString()
    }

Пример вызова для Вашего случая:

        val phone = "+7 (960) 454 343 88"
        text.text = phone.replaceCharsByCondition(
            with = '#',
            startIndexInclusive = 9,
            endIndexExclusive = 15,
            condition = { it.isDigit() }
        )
→ Ссылка