← Dart EspañolChapter 09 of 13

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 →