Это лучшее объяснение, которое я видел. Понимать JavaScripts это с помощью Clarity
Ссылка эта ALLWAYS означает (и содержит значение) объект - особый объект - и он обычно используется внутри функции или метода, хотя он может использоваться вне функции в глобальной области. Обратите внимание, что когда мы используем строгий режим, это содержит значение неопределенных в глобальных функциях и анонимных функциях, которые не привязаны к какому-либо объекту.
Существуют четыре условия, в которых это может запутать:
- Когда мы передаем метод (который использует этот ) в качестве параметра, который будет использоваться в качестве функции обратного вызова.
- Другой пример, когда это неправильно понимается, - это когда мы используем внутренний метод (замыкание). Важно отметить, что закрытие не может получить доступ к переменной этой внешней функции внешней функции], используя это ключевое слово, потому что эта переменная доступна только самой функции, а не внутренними функциями.
- Используя этот , когда метод присваивается переменной. Значение этого привязано к другому объекту, если мы назначим метод, который использует это для переменной
- Используя этот при использовании bind, apply и
Он дает примеры кода, объяснения и исправления кода, которые, как я думал, очень полезны.
Используйте forEach
цикл через символы input
и замените:
konsonanter.forEach { input = input.replace("${it}o${it}", "${it}", false) }
textView.text = input
Если вы используете функцию , замените на Regex и функцию преобразования в качестве параметров, вы можете создать действительно краткую полностью автономную функцию расширения:
fun String.translateBack() = with(Regex("([bcdfghjklmnpqrstvwxz])o\\1", RegexOption.IGNORE_CASE)) {
replace(this) { "${it.value.first()}" }
}
Пояснение :
Regex будет сопоставлять все одинаковые согласные (независимо от случая) вокруг «o». Чтобы убедиться, что согласные до и после "o" одинаковы, использовалась обратная ссылка к первой группе.
Таким образом, это также будет работать для таких случаев, как «coCatot».
Использование:
println("bob".translateBack()) // b
println("cocatot".translateBack()) // cat
println("coCatot".translateBack()) // cat
Проблема в том, что вы устанавливаете текст в textView
в каждом цикле и никогда не обновляете input
. Таким образом, вы, по сути, видите только результат вызова replace
, который происходит с параметрами "ZoZ"
и "Z"
в конце цикла, при этом input
остается исходной строкой.
Вместо этого вы можете продолжать обновлять input
, а затем установить текст, когда закончите:
val konsonanter = "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ"
var input = editText.text.toString()
var emptyString = ""
for (i in konsonanter) {
val find_text = i + "o" + i
val conso = i.toString()
input = input.replace(find_text, conso, false)
}
textView.text = input