indexOf(): buscar la primera vocal de una palabra en Kotlin

En Kotlin todo es un objeto y una palabra es un objeto de tipo String, que como tal posee métodos que nos permite realizar tareas sobre ellos; uno de estos métodos es indexOf(). El objetivo de este programa es encontrar el índice de la primera vocal en una palabra ingresada por el usuario.

Código fuente
package buscarprimeravocal

fun Int.filtrar(): Int = if(this != -1) this else 45000

fun main(args: Array<String>) {
    print("Ingrese una palabra a evaluar: ")
    var palabra = readLine() as String

    val a = palabra.indexOf("a", 0, true).filtrar()
    val e = palabra.indexOf("e", 0, true).filtrar()
    val i = palabra.indexOf("i", 0, true).filtrar()
    val o = palabra.indexOf("o", 0, true).filtrar()
    val u = palabra.indexOf("u", 0, true).filtrar()

    val vocal = minOf(a, minOf(e, minOf(i, minOf(o, u))))

    println("\nLa primera vocal es: ${palabra[vocal]}")
    println("Su indice es: $vocal")
}

En Kotlin la sentencia package es opcional para programas pequeños como el anterior, y la he incluido para hacer énfasis en esta parte del lenguaje; sin embargo para programas o proyectos grandes es recomendado incluirla, ya que se usa para importar el contenido en el código fuente desde otro lugar de un proyecto.

Creando extensión filtrar()

Creamos una extensión para objetos de tipo Int llamada filtrar().

fun Int.filtrar(): Int = if(this != -1) this else 45000

La extensión filtrar() evalúa si el objeto de tipo Int es diferente a -1 y devuelve el mismo valor del objeto, de lo contrario devuelve el valor 45000. La palabra this representa al objeto actual que invoca a la extensión.

Función main()

Al igual que en lenguajes como C++ y Go, en Kotlin también existe la función main(). Esta función es el punto de inicio de todo programa y solo el código escrito dentro ella será ejecutado cuando el programa se ejecute. A partir de ahora todo código escrito en esta publicación debe ir dentro de una función main().

Solicitar y leer una palabra ingresada por el uduario

El programa debe permitir que sea el usuario quien ingrese la palabra que desea evaluar.

print("Ingrese una palabra a evaluar: ")
var palabra = readLine() as String

Con la función print() mostramos un mensaje al usuario en donde le solicitamos que ingrese una palabra, el programa la lee usando la función readLine() y luego la convierte a tipo String usando el operador as. Para más información sobre cómo leer datos por teclado en Kotlin, diríjase a este link.

Obtener el índice de cada vocal

Para saber cual es la primera vocal de una palabra se requiere conocer el índice de la primera ocurrencia de cada una de las vocales, para esto, vamos a usar el método indexOf().

val a = palabra.indexOf("a", 0, true).filtrar()
val e = palabra.indexOf("e", 0, true).filtrar()
val i = palabra.indexOf("i", 0, true).filtrar()
val o = palabra.indexOf("o", 0, true).filtrar()
val u = palabra.indexOf("u", 0, true).filtrar()

El método indexOf() retorna el índice de la primera ocurrencia cada vocal, si no existe alguna, retorna -1. Solo el primer parámetro es obligatorio; el segundo es el índice inicial desde donde deseamos que el programa haga la búsqueda de la vocal, por defecto es 0; el tercero es un parámetro es un booleano para indicarle al programa si deseamos ignorar las mayúsculas, por defecto es false para no ignorarlas.

Por último llamamos a la extensión filtrar() para evaluar que el índice de cada vocal sea diferente a -1, de lo contrario devuelve el valor 45000 y es asignado a la variable correspondiente. Las extensiones funcionan y se llaman igual que los métodos predefinidos en los objetos, en este caso solo aplica para objetos de tipos Int.

Obtener el índice menor

Si alguno de los índices es -1, vamos tener un error que altera el resultado final debido a que todo número negativo es menor a cualquier número positivo. Esto lo hemos solucionado con la extensión filtrar().

val vocal = minOf(a, minOf(e, minOf(i, minOf(o, u))))

Usamos la función minOf() para obtener el índice menor entre los 5 índices encontrados anteriormente y el resultado es asignado a la variable «vocal». Esta función toma 2 parámetros, el primero es el índice de una vocal y el segundo es una llamada nuevamente a la función minOf(); excepto en la última llamada.

Mostrar la primera vocal y su índice

Lógicamente el programa debe mostrar algún resultado.

println("\nLa primera vocal es: ${palabra[vocal]}")
println("Su indice es: $vocal")

Primero mostramos la primera vocal encontrada en la palabra que ingresó el usuario, como se hace en la primera línea, usando el índice menor encontrado anteriormente y que hemos almacenado en la variable «vocal» para acceder a la vocal. Luego mostramos el índice en el cual se encuentra la primera vocal, como se hace en la segunda línea.

Ejecutando el programa

Para asegurarnos que el programa funciona como lo esperado, hacemos una prueba.

[fixedtorres@linuxero]$ kotlinc -include-runtime BuscarPrimeraVocal.kt -d BuscarPrimeraVocal.jar
[fixedtorres@linuxero]$ kotlin BuscarPrimeraVocal.jar 
Ingrese una palabra a evaluar: Cccccccccoooomo asi?

La primera vocal es: o
Su indice es: 9
[fixedtorres@linuxero]$

Después de compilar, ejecutar el programa e ingresar la palabra, en esta prueba nos indica que la primera vocal es la «o» y está en el índice 9. Con esto queda probado que si funciona el programa. Si desea leer sobre como compilar y ejecutar programas escritos en Kotlin desde la termina, haga clic aquí.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *