En C#, los objetos de la clase String son inmutables. Cualquier modificación en su valor resulta en la creación de una nueva instancia de String, lo que puede impactar el rendimiento en operaciones de manipulación intensiva. Para escenarios que requieren múltiples concatenaciones, inserciones o eliminaciones, se recomienda emplear la clase StringBuilder del espacio de nombres System.Text. Esta clase permite operar directaemnte sobre la cadena sin crear nuevos objetos, utilizando métodos como Append, Remove e Insert, y luego obtener el resultado mediante ToString.
Formato de Cadenas con String.Format
El método String.Format facilita la formateación de cadenas mediante especificadores de formato. A continuación, se presentan ejemplos reestructurados para ilustrar su uso:
// Ejemplo de formato moneda, adaptable según la configuración regional
string valorMonetario = String.Format("{0:C}", 15.75); // Ejemplo: ¥15.75 o $15.75
// Formato decimal con precisión controlada
string decimalFormateado = String.Format("{0:N3}", 9876.54321); // Resultado: 9,876.543
// Formato porcentual con redondeo
string porcentaje = String.Format("{0:P2}", 0.87654); // Resultado: 87.65%
// Uso de ceros y dígitos de relleno
string conCeros = String.Format("{0:000.00}", 42.3); // Resultado: 042.30
string conDigitos = String.Format("{0:####.#}", 123.456); // Resultado: 123.5
// Formato de fecha personalizado
string fechaFormateada = String.Format("{0:dd/MM/yyyy HH:mm:ss}", DateTime.Now); // Ejemplo: 25/10/2023 14:30:00
Funciones de Manipulación de Cadenas
C# ofrece métodos integrados para operar con cadenas, tales como:
- Longitud: Obtener el número de caracteres con
cadena.Length. - Recorte: Eliminar espacios en blanco usando
cadena.Trim(),cadena.TrimStart()ocadena.TrimEnd(). - Subcadenas: Extraer porciones con
cadena.Substring(inicio, longitud)ocadena.Substring(inicio). - Conversión de caso: Convertir a minúsculas con
cadena.ToLower()o a mayúsculas concadena.ToUpper(). - Búsqueda y Reemplazo: Localizar subcadenas con
cadena.Contains(),cadena.IndexOf(), y reemplazar concadena.Replace("viejo", "nuevo"). - División: Dividir una cadena en un array usando
cadena.Split(delimitador).
// Ejemplo de funciones de cadena
string textoOriginal = " Ejemplo de Texto con Espacios ";
string textoLimpio = textoOriginal.Trim(); // "Ejemplo de Texto con Espacios"
string subcadena = textoOriginal.Substring(10, 8); // "Text"
string textoEnMayusculas = textoOriginal.ToUpper(); // " EJEMPLO DE TEXTO CON ESPACIOS "
// Dividir y unir cadenas
string datos = "Manzana;Plátano;Cereza";
string[] frutas = datos.Split(';');
string cadenaUnida = string.Join(", ", frutas); // "Manzana, Plátano, Cereza"
Expresiones Regulares en C#
Las expresiones regulares (regex) permiten realizar búsquedas y manipulaciones de texto complejas mediante patrones. En C#, se utilizan a través de la clase Regex del espacio de nombres System.Text.RegularExpressions. Los patrones se definen con sintaxis especial; por ejemplo:
- Caracteres básicos:
\dpara dígitos,\wpara caracteres de palabra,\spara espacios en blanco, y.para cualquier carácter excepto salto de línea. - Caracteres de anclaje:
^para inicio de cadena,$para fin, y\bpara límite de palabra. - Cuantificadores:
*(cero o más),+(uno o más),?(cero o uno), y{n,m}para rangos específicos. - Grupos y alteranncia: Usar paréntesis para agrupar y el operador
|para alternancia.
using System.Text.RegularExpressions;
// Ejemplo básico de coincidencia
string textoEntrada = "Fecha: 2023-10-25, Hora: 14:30";
Regex patronFecha = new Regex(@"\d{4}-\d{2}-\d{2}");
Match coincidencia = patronFecha.Match(textoEntrada);
if (coincidencia.Success)
{
Console.WriteLine($"Fecha encontrada: {coincidencia.Value}"); // Salida: 2023-10-25
}
// Uso de grupos para captura
string emailEjemplo = "contacto@ejemplo.com";
Regex patronEmail = new Regex(@"^(\w+)@(\w+\.\w+)$");
Match resultado = patronEmail.Match(emailEjemplo);
if (resultado.Success)
{
string usuario = resultado.Groups[1].Value; // "contacto"
string dominio = resultado.Groups[2].Value; // "ejemplo.com"
}
// Búsqueda de múltiples coincidencias
string textoMulti = "Valores: 100, 200, 300";
Regex patronNumeros = new Regex(@"\d+");
MatchCollection todasCoincidencias = patronNumeros.Matches(textoMulti);
foreach (Match m in todasCoincidencias)
{
Console.WriteLine(m.Value); // Imprime: 100, 200, 300
}
Las expresiones regulares ofrecen características avanzadas como cuantificadores no codiciosos (usando ?), búsqueda anticipada (lookahead) y búsqueda retrospectiva (lookbehind), que permiten crear patrones sofisticados para validación y procesamiento de texto.