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 →