Manipulacion de Cadenas de Texto
## Objetivos de Aprendizaje
- Crear y manipular cadenas de texto
- Usar funciones de arreglos de cadenas
- Convertir entre tipos de datos
- Buscar y reemplazar dentro de cadenas
## Creando Cadenas de Texto
### Cadenas de Texto Basicas
```matlab
% Arreglo de caracteres (estilo antiguo)
c1 = 'Hola';
c2 = 'Mundo';
% Escalar de cadena (R2016b+)
s1 = "Hola";
s2 = "Mundo";
```
### Arreglos de Cadenas
```matlab
% Vector de cadenas
nombres = ["Juan", "Juana", "Roberto"];
% Crear desde arreglo de caracteres
c = 'Hola Mundo';
s = string(c);
% Crear arreglo de cadenas
strArray = string({'Alicia', 'Roberto', 'Carlos'});
```
### Cadenas Vacias
```matlab
emptyChar = '';
emptyString = string("");
strWithSpaces = strings(1, 3); % Arreglo 1x3 de cadenas vacias
```
## Operaciones con Cadenas
### Concatenacion
```matlab
% Concatenacion horizontal
s1 = "Hola";
s2 = "Mundo";
s = [s1, s2] % "HolaMundo"
s = strcat(s1, s2) % "HolaMundo"
% Con separador
s = strjoin({s1, s2}, ' ') % "Hola Mundo"
```
### Unir Arreglos de Cadenas
```matlab
nombres = ["Alicia", "Roberto", "Carlos"];
% Unir con delimitador
joined = strjoin(nombres, ', ') % "Alicia, Roberto, Carlos"
% Unir lineas
lines = strjoin(nombres, newline)
```
### Replicar Cadenas
```matlab
s = "Ha";
rep = repmat(s, 1, 3) % "HaHaHa"
% Usando la funcion strings
rep = strings(1, 3);
rep(:) = "Hola";
```
## Longitud de Cadena
```matlab
s = "Hola";
length(s) % 5 (longitud de cadena)
strlength(s) % 5
% Para arreglo de cadenas
nombres = ["Alicia", "Roberto", "Carlos"];
strlength(nombres) % [5, 7, 6]
```
## Extrayendo Subcadenas
### Extraer Partes
```matlab
s = "Hola Mundo";
% Extraer por posicion
extract(s, [1, 5]) % "Hola"
extract(s, [7, 11]) % "Mundo"
% Usando dos puntos
s(1:5) % "Hola"
s(7:end) % "Mundo"
```
### Dividir y Unir
```matlab
s = "Hola,Mundo,2024";
split(s, ',') % ["Hola", "Mundo", "2024"]
splitlines(s) % Dividir por nuevas lineas
% Unir de vuelta
strjoin({"A", "B", "C"}, '-') % "A-B-C"
```
### Extraer Entre
```matlab
s = "Hola(Mundo)";
extractBetween(s, '(', ')') % "Mundo"
```
## Buscando en Cadenas
### Encontrar Patron
```matlab
s = "Hola Mundo";
% Contiene
contains(s, 'Mundo') % true
contains(s, 'mundo') % false (sensible a mayusculas)
contains(s, 'mundo', 'IgnoreCase', true) % true
% ComienzaCon / TerminaCon
startsWith(s, 'Hola') % true
endsWith(s, 'Mundo') % true
```
### Encontrar Posicion
```matlab
s = "Hola Mundo";
% Posicion del patron
idx = strfind(s, 'o') % [5, 8] (posiciones)
% Usando contains
TF = contains(s, 'o')
% Usando operador ==
TF = (s == 'Mundo')
```
### Comparacion de Cadenas
```matlab
s1 = "Hola";
s2 = "Mundo";
s3 = "Hola";
% Igual
strcmp(s1, s2) % false
strcmp(s1, s3) % true
% Igual ignorando mayusculas
strcmpi(s1, 'hola') % true
% Comparar primeros n caracteres
strncmp(s1, s3, 3) % true
```
### Coincidencia de Patrones
```matlab
s = "El veloz marron";
% Usando contains
contains(s, 'marron')
% Usando regexp
pat = "marron";
idx = strfind(s, pat)
% Patrones regex
regexp(s, '\w+') % Encontrar todas las palabras
```
## Reemplazando Cadenas
### Reemplazo Basico
```matlab
s = "Hola Mundo";
% Reemplazar subcadena
newStr = replace(s, 'Mundo', 'MATLAB') % "Hola MATLAB"
newStr = replace(s, 'o', '0') % "Hell0 Mund0"
```
### Multiples Reemplazos
```matlab
s = "rojo azul rojo verde";
% Reemplazar multiples
replace(s, {'rojo', 'azul'}, {'verde', 'amarillo'})
```
### Usando regexprep
```matlab
s = "Hola123Mundo456";
% Reemplazo con regex
newStr = regexprep(s, '\d+', '#') % "Hola#Mundo#"
newStr = regexprep(s, '[0-9]', '0') % "Hola000Mundo000"
```
## Mayusculas y Minusculas
```matlab
s = "Hola Mundo";
upper(s) % "HOLA MUNDO"
lower(s) % "hola mundo"
title(s) % "Hola Mundo"
sentcase(s) % "Hola mundo" (caso de oracion)
```
## Recortar y Rellenar
```matlab
s = " Hola ";
trim(s) % "Hola" (eliminar espacios iniciales/finales)
s2 = "Hola";
pad(s2, 10) % " Hola" (rellenar a longitud 10)
pad(s2, 10, 'both') % " Hola "
```
## Conversion de Cadenas
### Numero a Cadena
```matlab
% Numero a cadena
num2str(42) % "42"
num2str(3.14159, 4) % "3.142"
% Entero a cadena
int2str(42) % "42"
% Usando string (R2016b+)
string(42) % "42"
string(3.14) % "3.14"
% Cadena formateada
s = sprintf("Valor: %.2f", 3.14159) % "Valor: 3.14"
```
### Cadena a Numero
```matlab
% Cadena a numero
str2double("42") % 42
str2num("42") % 42
% Cadena a entero
str2double("42")
% Con manejo de errores
str = "abc";
num = str2double(str); % NaN
isnan(num) % true
```
### Conversion de Arreglo de Caracteres
```matlab
s = "Hola";
c = char(s) % 'Hola'
c = ['H', 'e', 'l', 'l', 'o'];
s = string(c) % "Hola"
```
## Formateo de Cadenas
### sprintf
```matlab
nombre = "Alicia";
edad = 30;
s = sprintf('Nombre: %s, Edad: %d', nombre, edad);
% "Nombre: Alicia, Edad: 30"
s = sprintf('Pi: %.4f', pi);
% "Pi: 3.1416"
```
### Opciones de Formateo
```matlab
% Ancho y precision
sprintf('%10s', 'Hola') % " Hola"
sprintf('%.2f', 3.14159) % "3.14"
% Formateo de enteros
sprintf('%05d', 42) % "00042"
sprintf('%+d', 42) % "+42"
```
## Arreglos de Cadenas con Datos Faltantes
```matlab
% Arreglo de cadenas con faltantes
str = strings(1, 3);
str(1) = "Alicia";
str(2) = "";
str(3) = "Roberto";
% Detectar faltantes
ismissing(str) % [false, true, false]
% Reemplazar faltantes
str = replace(str, "", string(missing));
```
## Patrones de Cadenas
### Objetos de Patron de Cadena (R2020b+)
```matlab
pat = pattern("Hola");
% O con sintaxis regex
pat = regexPattern("H\w+");
s = "Hola Mundo";
extract(s, pat) % "Hola"
contains(s, pat) % true
```
## Resumen
- Usar `string()` para escalares de cadena, `["a", "b"]` para arreglos
- `strcat()` y `[s1, s2]` para concatenacion
- `split()` y `strjoin()` para dividir/unir
- `replace()` para reemplazo de subcadenas
- `contains()`, `startsWith()`, `endsWith()` para busqueda
- `upper()`, `lower()`, `trim()` para transformaciones
- `num2str()` y `str2double()` para conversion
- `sprintf()` para cadenas formateadas
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →