Cadenas
## Objetivos de Aprendizaje
- Dominar la creacion y manipulacion de cadenas
- Comprender la interpolacion de cadenas
- Trabajar con Unicode y runes
- Usar metodos de cadena efectivamente
## Creando Cadenas
### Cadenas Basicas
```dart
void main() {
// Comillas simples
var single = 'Hola Mundo';
// Comillas dobles
var double = "Hola Mundo";
// Comillas triples para multi-linea
var multi = '''
Esto es una
cadena de
varias lineas
''';
// Cadena cruda (manejo de escape deshabilitado)
var raw = r'C:\Users\NewFolder';
print(raw); // C:\Users\NewFolder
}
```
### Inmutabilidad de Cadenas
```dart
void main() {
var s1 = 'Hola';
var s2 = s1; // Ambos referencian el mismo objeto
s1 = 'Mundo'; // Crea una nueva cadena
print(s1); // Mundo
print(s2); // Hola (sin cambios)
}
```
## Interpolacion de Cadenas
### Interpolacion Basica
```dart
void main() {
var name = 'Alice';
var age = 30;
print('Nombre: $name'); // Nombre: Alice
print('Edad: $age'); // Edad: 30
print('$name tiene $age'); // Alice tiene 30
}
```
### Interpolacion de Expresiones
```dart
void main() {
var a = 5;
var b = 3;
print('$a + $b = ${a + b}'); // 5 + 3 = 8
print('${a > b ? "mayor" : "menor"}'); // mayor
}
```
### Evitando Signos de Dolar
```dart
void main() {
// Usar \ para escapar
print('\$100'); // $100
// Usar cadena cruda
var price = r'$100';
print(price); // $100
}
```
## Metodos de Cadena
### Longitud y Verificacion
```dart
void main() {
var s = 'Hola Mundo';
print(s.length); // 11
print(s.isEmpty); // false
print(s.isNotEmpty); // true
print(s.contains('Mundo')); // true
print(s.startsWith('Hola')); // true
print(s.endsWith('!')); // false
}
```
### Operaciones de Mayusculas/Minusculas
```dart
void main() {
var s = 'Hola Mundo';
print(s.toUpperCase()); // HOLA MUNDO
print(s.toLowerCase()); // hola mundo
}
```
### Busqueda
```dart
void main() {
var s = 'Hola Mundo';
print(s.indexOf('Mundo')); // 6
print(s.lastIndexOf('o')); // 7
print(s.contains('foo')); // false
}
```
### Subcadenas
```dart
void main() {
var s = 'Hola Mundo';
print(s.substring(6)); // Mundo
print(s.substring(0, 5)); // Hola
print(s.split(' ')); // [Hola, Mundo]
}
```
### Recorte
```dart
void main() {
var s = ' Hola ';
print(s.trim()); // Hola
print(s.trimLeft()); // Hola__
print(s.trimRight()); // __Hola
}
```
### Reemplazo
```dart
void main() {
var s = 'Hola Mundo';
print(s.replaceAll('Mundo', 'Dart')); // Hola Dart
print(s.replaceFirst('l', 'L')); // HeLlo Mundo
print(s.replaceRange(0, 5, 'Hi')); // Hi Mundo
}
```
### Division
```dart
void main() {
var csv = 'manzana,platano,naranja';
print(csv.split(',')); // [manzana, platano, naranja]
var words = 'Hola Mundo';
print(words.split(' ')); // [Hola, Mundo]
// Con limite
print(csv.split(',', 2)); // [manzana, platano,naranja]
}
```
### Relleno
```dart
void main() {
var s = '42';
print(s.padLeft(5, '0')); // 00042
print(s.padRight(5, '.')); // 42...
}
```
## StringBuffer
### Construccion Eficiente de Cadenas
```dart
void main() {
var buffer = StringBuffer();
buffer.write('Hola');
buffer.write(' ');
buffer.write('Mundo');
print(buffer.toString()); // Hola Mundo
// Inicializacion directa
var sb = StringBuffer('Inicial');
sb.write(' Mas');
print(sb.toString()); // Inicial Mas
}
```
### Con Coleccion
```dart
void main() {
var items = ['manzana', 'platano', 'naranja'];
var buffer = StringBuffer('Frutas:');
for (var item in items) {
buffer.write(' $item');
}
print(buffer.toString()); // Frutas: manzana platano naranja
}
```
## Runes y Unicode
### Conceptos Basicos de Unicode
```dart
void main() {
// Puntos de codigo Unicode
var euro = '\u20AC'; // €
var heart = '\u2665'; // ♥
var smiley = '\u{1F600}'; // 😀 (extendido)
print('Euro: $euro');
print('Corazon: $heart');
print('Sonrisa: $smiley');
}
```
### Propiedad Runes
```dart
void main() {
var emoji = 'Hola 👋';
print(emoji.runes.toList()); // [72, 101, 108, 108, 111, 32, 128075]
// Iterar sobre runes
for (var code in emoji.runes) {
print('Codigo: $code, Char: ${String.fromCharCode(code)}');
}
}
```
### Clusters de Grafemas
```dart
void main() {
var flag = '🇺🇸';
print(flag.runes.toList()); // [127482, 127480]
print(flag.length); // 2 (unidades de codigo)
print(flag.runes.length); // 2 (runes)
// Para caracteres percibidos por el usuario, usar el paquete characters
}
```
## Coincidencia de Patrones
### Expresiones Regulares
```dart
void main() {
var email = RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$');
print(email.hasMatch('test@email.com')); // true
print(email.hasMatch('invalido')); // false
}
```
### Reemplazo con Patron
```dart
void main() {
var text = 'Hola Mundo Mundo Mundo';
// Reemplazar todos
print(text.replaceAll(RegExp(r'Mundo'), 'Dart'));
// Hola Dart Dart Dart
// Reemplazar primero
print(text.replaceFirst(RegExp(r'Mundo'), 'Dart'));
// Hola Dart Mundo Mundo
}
```
### Extraer Coincidencias
```dart
void main() {
var text = 'Precio: 19.99';
var match = RegExp(r'(\d+\.\d+)').firstMatch(text);
if (match != null) {
print(match.group(0)); // 19.99
print(match.start); // 8
print(match.end); // 13
}
}
```
## Comparacion de Cadenas
```dart
void main() {
var a = 'hola';
var b = 'hola';
var c = 'mundo';
print(a == b); // true
print(a == c); // false
print(a.compareTo(b)); // 0 (igual)
print(a.compareTo(c)); // negativo (a < c)
}
```
## Metodos de Verificacion de Cadenas
```dart
void main() {
var num = '123';
var text = 'abc';
print(num.contains(RegExp(r'^\d+$'))); // true
print(text.contains(RegExp(r'^\d+$'))); // false
// isAlpha, isNumeric etc. no son integrados
// Usar RegExp o metodos de parseo
}
```
## Resumen
- Cadenas: `''`, `""`, `''' '''`, `r''` (cruda)
- Interpolacion: `$var`, `${expr}`
- Inmutables: las operaciones devuelven nuevas cadenas
- Metodos: length, indexOf, substring, split, replaceAll, trim
- StringBuffer para concatenacion eficiente
- Runes para Unicode: `cadena.runes`
- RegExp para coincidencia de patrones
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →