11 - Métodos de la clase String

En el lenguaje Ruby todo es un objeto, por lo tanto los String son objetos.

Veremos que los String tienen una serie de métodos para manipular su contenido: convertirlo a mayúsculas, a minúsculas, verificar si un String esta contenido en otro String, la cantidad de caracteres que tiene, convertir el String a entero (to_i), convertirlo a valor real (to_f) etc.

Para llamar a un método de la clase String lo hacemos a partir de un objeto de dicha clase:

# definimos un objeto de tipo String
nombre = "juan"
# llamamos a un método de dicho objeto
puts nombre.length

El método length retorna la cantidad de caracteres que almacena la variable nombre. Ya hemos visto que para llamar a los métodos de un objeto lo hacemos separando el nombre del objeto y el método por el operador punto.

Haremos una serie de ejercicios para mostrar los métodos más comunes de los String en Ruby.

Problema 1:

Inicializar un String con la cadena "mAriA" luego llamar a sus métodos upcase, downcase y capitalize, guardar los datos retornados en otros Strings y mostrarlos por pantalla.

Programa: ejercicio051.rb

nombre = "mAriA"
cadena1 = nombre.upcase
puts cadena1
cadena2 = nombre.downcase
puts cadena2
cadena3 = nombre.capitalize
puts cadena3

Si ejecutamos el programa podemos observar que el método upcase retorna el contenido de la cadena convertida a mayúsculas, downcase la retorna convertida a minúsculas y capitalize solo deja en mayúsculas el primer caracter:

String en ruby

Es importante notar que el contenido de la variable nombre no cambia al llamar a cualquiera de los tres métodos vistos.

Problema 2:

Inicializar un String con la cadena "mAriA" luego modificar el contenido de la misma variable llamando a los métodos upcase!, downcase! y capitalize!.

Es importante tener en cuenta que en el lenguaje Ruby se puede utilizar los caracteres ! y ? al final del nombre de un método.

Programa: ejercicio052.rb

nombre = "mAriA"
nombre.upcase!
puts nombre
nombre.downcase!
puts nombre
nombre.capitalize!
puts nombre

En pantalla el resultado es el mismo, lo importante es notar que el método upcase! convierte a mayúscula los caracteres almacenados en la variable nombre.

En general, los métodos que terminan con el caracter ! indican que el método modificará el objeto en el que se llama. En Ruby se llama a estos "métodos peligrosos" porque cambian de estado su contenido.

Es importante notar la diferencia entre los métodos upcase y upcase!. Se utiliza mucho este concepto en la biblioteca estándar de Ruby y en librerías hechas por otros programadores de Ruby.

Problema 3:

Cargar los nombres de dos personas por teclado y luego mostrar el que tiene más caracteres.

Programa: ejercicio053.rb

print "Ingrese primmer nombre:"
nombre1 = gets.chomp
print "Ingrese segundo nombre:"
nombre2 = gets.chomp
if nombre1.length == nombre2.length
  print nombre1, " ", nombre2, " tienen la misma cantidad de caracteres:", nombre1.length
else
  if nombre1.length > nombre2.length
    print nombre1, " tiene ", nombre1.length
  else
    print nombre2, " tiene ", nombre2.length
  end
end

El método length retorna la cantidad de caracteres almacenados en la variable de tipo String.

Problema 4:

Ingresar por teclado una oración y luego mostrar un mensaje si el String ingresado comienza con la cadena "hola", finaliza con la palabr "hola" o dentro de la cadena esta la palabra "hola".

Programa: ejercicio054.rb

print "Ingrese una oración:"
oracion = gets.chomp
if oracion.start_with?("hola")
  puts "La oración comienza con la palabra 'hola'"
end
if oracion.end_with?("hola")
  puts "La oración finaliza con la palabra 'hola'"
end
if oracion.include?("hola")  
  puts "La oración tiene contenido la palabra 'hola'"
end

En este problema empleamos tres nuevos métodos de la clase String:

  • start_with? : Retorna true (verdadero) si el String que le pasamos como parámetro coincide con los primeros caracteres del String original.
  • end_with? : Retorna true (verdadero) si el String que le pasamos como parámetro coincide con los últimos caracteres del String original.
  • include? : Retorna true (verdadero) si el String que le pasamos se encuentra en alguna parte dentro del String original.

En Ruby cuando un método retorna true o false es común que se utilice el caracter ? como último caracter del nombre de método (toda la librería estándar de Ruby así lo implementa)

Problema 5:

Ingresar por teclado una oración y luego remplazar todas las cadenas "hola" que contiene la oración por la cadena "hello".

Programa: ejercicio055.rb

print "Ingrese una oración:"
oracion = gets.chomp
oracion.gsub!("hola", "hello")
puts oracion

El método gsub! (global substitution) modifica la variable "oración" sustituyendo todas las apariciones del String "hola" por la cadena "hello".

Recordar que los métodos que terminan con el signo de exclamación "!" normalmente modifican el contenido de la variable (en este ejemplo modifican la variable "oracion")

Dentro de la biblioteca estándar de Ruby hay otros tres métodos que hacen actividades similares a este método:

  • gsub : El objetivo es idéntico a gsub! pero no modifica la variable sino que retorna un String con las sustituciones:

    nueva_oracion = oracion.gsub("hola", "hello")
    
  • sub! : El objetivo es similar a gsub! salvo que solo sustituye la primera aparición del String.
  • sub : El objetivo es idéntico a sub! salvo retorna un String con la modificación.

Operador + con String

Con los objetos de tipo String podemos concatenar sus valores utilizando el operador +.

Si tenemos por ejemplo dos String y queremos generar un tercer String con el contenido de los dos primeros lo podemos hacer utilizando el operador +:

cadena1 = "hola"
cadena2 = " mundo"
cadena = cadena1 + cadena2
puts cadena # se imprime: hola mundo

Operador << con String

Mediante el operador << podemos añadir un String a otro String:

cadena1 = "hola"
cadena2 = " mundo"
cadena1 << cadena2
puts cadena1 # se imprime: hola mundo

Al String cadena1 se le añade el contenido de cadena2.

Es bueno siempre tener a mano la página oficial de la clase String de Ruby