Así que tengo un campo de texto donde debe ingresar su texto "codificado" y volver a traducirlo a un idioma no codificado usando .replace para eliminar ciertos caracteres. Pero no puedo hacer que funcione.
Hay un "lenguaje de código" para niños en el que tomas una palabra, como gato, y para cada consonante agregas una "o" y la consonante nuevamente. Así que una "b" sería "bob". Con las vocales simplemente se quedan como están. Cat sería cocatot.
fun translateBack(view : View) { val konsonanter = "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ" var input = editText.text.toString() var emptyString = "" for(i in konsonanter) { val find_text = i + "o" + i var conso = i.toString() textView.text = input.replace(find_text, conso, false) } }Me gustaría que elimine las dos letras siguientes para cada consonante (si es posible). Entonces, si ingreso "cocowow", debería salir "vaca". En este momento solo obtengo lo que ingresé en el campo de texto...
Use un bucle forEach a través de los caracteres de input y reemplace:
konsonanter.forEach { input = input.replace("${it}o${it}", "${it}", false) } textView.text = inputEl problema es que está configurando el texto en textView en cada bucle y nunca actualizando input . Básicamente, solo está viendo el resultado de la llamada de replace que ocurre con los "ZoZ" y "Z" al final del ciclo, y input sigue siendo la cadena original.
En su lugar, puede seguir actualizando input y luego configurar el texto cuando haya terminado:
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 = inputSi usa la función de reemplazo con Regex y una función de transformación como parámetros, puede crear una función de extensión realmente concisa y completamente autónoma:
fun String.translateBack() = with(Regex("([bcdfghjklmnpqrstvwxz])o\\1", RegexOption.IGNORE_CASE)) { replace(this) { "${it.value.first()}" } }Explicación:
El Regex coincidirá con todas las mismas consonantes (sin importar el caso) alrededor de una "o". Para asegurarse de que la consonante anterior y posterior a la "o" sea la misma, se utilizó una referencia inversa al primer grupo.
Entonces, esto también funcionará para casos como "coCatot".
Uso:
println("bob".translateBack()) // b println("cocatot".translateBack()) // cat println("coCatot".translateBack()) // cat