← Ruby EspañolChapter 07 of 13

Cadenas de Texto

## Objetivos de Aprendizaje - Crear y manipular cadenas de texto - Dominar la interpolacion de cadenas - Usar metodos de cadenas de texto efectivamente - Formatear cadenas con varias tecnicas ## Crear Cadenas de Texto ### Comillas Simples ```ruby # Literal - sin interpolacion nombre = 'Alicia' saludo = 'Hola, #{nombre}' # Sin interpolacion! puts saludo # "Hola, #{nombre}" # Escapar caracteres ruta = 'C:\\Usuarios\\Alicia\\Documentos' puts ruta # "C:\Usuarios\Alicia\Documentos" ``` ### Comillas Dobles ```ruby # Interpolacion permitida nombre = "Alicia" saludo = "Hola, #{nombre}" puts saludo # "Hola, Alicia" # Interpolacion de expresiones puts "2 + 2 = #{2 + 2}" # "2 + 2 = 4" ``` ### Otras Sintaxis ```ruby # Here document (multi-linea) poema = <<~TEXTO Las rosas son rojas, Las violetas son azules, Ruby es divertido, Y tu tambien lo eres. TEXTO # Notacion con porcentaje cadena_array = %w(manzana banana cereza) # Array interpolado = %W(Hola #{nombre}) # Array con interpolacion comillas_simples = %q(Hola mundo) # Cadena con comillas simples comillas_dobles = %Q(Hola #{nombre}) # Cadena con comillas dobles ``` ## Interpolacion de Cadenas ```ruby nombre = "Ruby" version = 3.0 puts "Bienvenido a #{nombre} #{version}!" puts "Suma: #{1 + 2}" puts "Mayusculas: #{nombre.upcase}" puts "Longitud: #{nombre.length}" ``` ## Secuencias de Escape | Secuencia | Significado | |----------|-------------| | `\n` | Nueva linea | | `\t` | Tabulacion | | `\r` | Retorno de carro | | `\\` | Barra invertida | | `\"` | Comilla doble | | `\'` | Comilla simple | | `\b` | Retroceso | | `\s` | Espacio | ## Metodos de Cadenas de Texto ### Consultar ```ruby str = "Hola, Mundo!" str.length # 13 str.size # 13 str.empty? # false str.include?("Mundo") # true str.start_with?("Hola") # true str.end_with?("!") # true str.index("Mundo") # 7 str.rindex("o") # 8 str.count("l") # 3 ``` ### Conversion de Mayusculas/Minusculas ```ruby "hola".upcase # "HOLA" "HOLA".downcase # "hola" "hola".capitalize # "Hola" "hELLO".swapcase # "HeLLO" ``` ### Eliminar Espacios en Blanco ```ruby " hola ".strip # "hola" " hola".lstrip # "hola " "hola ".rstrip # " hola" "hola".strip.empty? # false ``` ### Dividir y Unir ```ruby "uno,dos,tres".split(",") # ["uno", "dos", "tres"] "hola mundo".split # ["hola", "mundo"] "hola".chars # ["h", "e", "l", "l", "o"] "hola".each_char.to_a # ["h", "e", "l", "l", "o"] "uno,dos,tres".split(",", 2) # ["uno", "dos,tres"] ["hola", "mundo"].join(" ") # "hola mundo" ["a", "b", "c"].join # "abc" ``` ### Subcadenas ```ruby str = "Hola, Mundo!" str[0] # "H" str[0, 5] # "Hola" (inicio, longitud) str[0..4] # "Hola" (rango inclusivo) str[7..11] # "Mundo" str[-1] # "!" str[0..-2] # "Hola, Mund" (todo excepto el ultimo) str.slice(0) # "H" str.slice(0, 5) # "Hola" str.slice(0..4) # "Hola" ``` ### Reemplazar ```ruby "hola".replace("mundo") # "mundo" (muta) "hola".sub("l", "x") # "hexlo" (solo el primero) "hola".gsub("l", "x") # "hexxo" (todos) "hola".gsub(/[aeiou]/, "*") # "h*ll*" (regex) # Con capturas "hola".gsub(/(.)(.)/) { |a, b| b + a } # "ehllo" ``` ### Insertar y Eliminar ```ruby "hola".insert(1, " Mundo") # "h Mundoola" "hola" << " Mundo" # "hola Mundo" (shovel) "hola".concat(" Mundo") # "hola Mundo" "hola".prepend("di: ") # "di: hola" "hola".concat(" mundo") # "hola mundo" "hola".delete("l") # "hoo" ``` ### Buscar y Coincidir ```ruby "hola".index("l") # 2 "hola".rindex("l") # 3 "hola".match(/[aeiou]/) # # "hola" =~ /[aeiou]/ # 1 (indice o nil) "hola" =~ /x/ # nil "hola".match?(/[aeiou]/) # true (Ruby 2.4+) ``` ### Formatear ```ruby # Formateo de cadenas nombre = "Alicia" edad = 30 # Estilo sprintf sprintf("Nombre: %s, Edad: %d", nombre, edad) # "Nombre: Alicia, Edad: 30" format("PI: %.2f", 3.14159) # "PI: 3.14" # Operador % "Nombre: %s, Edad: %d" % [nombre, edad] # "Nombre: Alicia, Edad: 30" ``` ### Relleno y Alineacion ```ruby "hola".ljust(10) # "hola " "hola".rjust(10) # " hola" "hola".center(10) # " hola " "hola".ljust(10, "-") # "hola-----" "hola".center(11, "=") # "==hola===" ``` ### Otros Metodos Utiles ```ruby "hola".reverse # "olleh" "hola".succ # "ielp" (siguiente cadena) "hola".next # "ielp" (alias) "hola".ord # 104 (codigo de caracter) "h".ord # 104 104.chr # "h" "abc".crypt("xx") # Encriptado (obsoleto, usar securerandom) # Codificacion "hola".encoding # # "hola".encode("UTF-16LE") # Convertir codificacion ``` ## Expresiones Regulares con Cadenas ```ruby # Coincidencia "hola 123"[/[0-9]+/] # "123" "hola"[/[0-9]+/] # nil # Scan (todas las coincidencias) "hola 123 mundo 456"[/\d+/] # "123" "hola 123 mundo 456".scan(/\d+/) # ["123", "456"] # Dividir con regex "uno,dos,tres".split(/,/) # ["uno", "dos", "tres"] "a1b2c3".split(/[0-9]/) # ["a", "b", "c", ""] ``` ## Metodos de Mutacion La mayoria de los metodos de cadenas retornan nuevas cadenas. Algunos mutan en su lugar: ```ruby str = "hola" # No muta (retorna nueva cadena) str.upcase # "HOLA" str # "hola" (sin cambios) # Muta (con !) str.upcase! # "HOLA" str # "HOLA" (cambiado) ``` ### Lista de Metodos de Mutacion | Metodo | Muta? | Retorna | |--------|--------|---------| | `upcase` | No | Nueva cadena | | `upcase!` | Si | `self` o `nil` | | `replace` | Si | `self` | | `concat` | Si | `self` | | `prepend` | Si | `self` | | `insert` | Si | `self` | | `clear` | Si | `self` | ## Resumen - Las comillas dobles permiten interpolacion, las comillas simples son literales - `#{expresion}` para interpolacion - `%Q()`, `%W()`, `%q()`, `%w()` para creacion especial de cadenas - `strip`, `lstrip`, `rstrip` para espacios en blanco - `split`, `join` para conversion de arrays - `sub` (primero) y `gsub` (todos) para reemplazo - `[]` para acceso a subcadenas - Los metodos de mutacion terminan con `!` (o retornan nueva cadena) - Expresiones regulares: `/patron/`, `=~`, `match`, `scan`

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →