Hay muchos métodos en la clase String
(no hay que memorizarlos todos; para algo está la documentación) como:
reverse
, que invierte los caracteres de un stringlength
, que nos dice el número de caracteres de un string, incluyendo los espacios en blanco.upcase
, que pone todos los caracteres en mayúsculasdowncase
, que pone todos los caracteres en minúsculasswapcase
, pone los caracteres mayúsculas en minúsculas y los minúsculas en mayúsculascapitalize
, pone el primer caracter del string en mayúsculas, y los demás en minúsculasslice
, da una parte de un stringLos métodos upcase
, downcase
, swapcase
y capitalize
tienen su correspondiente método bang, que modifican el string (upcase!
, downcase!
, swapcase!
, y captalize!
). Si no necesitas el string original, es bueno usarlo, por que ahorrarás memoria; sobretodo si el string es largo.
Cada vez que se se asigna a una variable un string, se crea un nuevo objeto String. ¿Cómo es administrada la memoria en los strings? ¿Hay una porción separada para ellos? La clase String tiene más de 75 métodos. Leyendo la Guía de Uso de Ruby (Ruby User's Guide), dice "no tenemos en cuenta la memoria ocupada por un string. Prescindimos de cualquier administración de memoria". Para saber todos los métodos que tiene un String:
Los strings tienen distintos métodos para comparar su igualdad. El más común de ellos es ==
. Otro método es String.eql?
, que devuelve el mismo resultado que ==
. Y por último está String.equal?, que comprueba si dos strings son el mismo objeto. Veamos el siguiente ejemplo:
def compara_strings(s1, s2, s3)
#comprobamos si el contenido es igual
if s1 == s2
puts 'Ambos strings tienen el mismo contenido'
else
puts 'Ambos strings NO tienen el mismo conenido'
end
if s1.eql?(s2)
puts 'Ambos strings tienen el mismo contenido'
else
puts 'Ambos strings NO tienen el mismo conenido'
end
=begin
ahora comprobamos si ambos objetos son iguales:
dos objetos diferentes
pueden tener el mismo contenido
=end
if s1.equal?(s2)
puts 'Ambos strings son el mismo objeto'
else
puts 'Ambos strings NO son el mismo objeto'
end
if s1.equal?(s3)
puts 'Ambos strings son el mismo objeto'
else
puts 'Ambos strings NO son el mismo objeto'
end
end
string1 = 'Jonathan'
string2 = 'Jonathan'
string3 = string1
compara_strings(string1,string2,string3)
Dado un string, invertirlo palabra por palabra (en vez de letra por letra).
Se puede usar String.split que nos da un array formado por las palabras del string. La clase Array tiene un método reverse; de tal forma que puedes revertir el array antes de juntarlo para hacer un nuevo string:
palabras = 'Tutorial de Ruby - fácil, sencillo y con fundamento'
puts palabras.split(" ").reverse.join(" ")