Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Tip
Este artículo forma parte de la sección Aspectos básicos de los desarrolladores que ya conocen al menos un lenguaje de programación y están aprendiendo C#. Si no está familiarizado con la programación, comience primero con los tutoriales de introducción .
¿Viene de otro idioma? Al igual que Java y JavaScript, las cadenas de C# son inmutables: métodos como Replace y Trim devuelven una nueva cadena en lugar de cambiar el original. Los patrones aquí son paralelos a los métodos String en esos lenguajes.
Un C# string es inmutable, lo que significa que su contenido nunca cambia después de crearlo. Cada método que parece modificar una cadena devuelve realmente un nuevo string con los cambios, dejando intacto el original. Los ejemplos de este artículo almacenan cada resultado en una nueva variable para que pueda ver tanto el origen como el valor modificado.
Elija la técnica que coincida con su escenario: reemplace texto conocido, recorte espacios en blanco, quite un intervalo de caracteres, reemplace el texto que coincida con un patrón o edite caracteres individuales.
Reemplazar texto conocido
El String.Replace método sustituye cada aparición de una cadena por otra y devuelve el resultado como una nueva cadena:
string source = "The mountains are behind the clouds today.";
// Replace returns a new string; the original is unchanged.
string updated = source.Replace("mountains", "peaks");
Console.WriteLine(source);
// => The mountains are behind the clouds today.
Console.WriteLine(updated);
// => The peaks are behind the clouds today.
La cadena original no cambia, lo que demuestra la inmutabilidad: Replace crea una nueva cadena con la sustitución.
Replace también tiene una sobrecarga que permite intercambiar caracteres individuales. En el ejemplo siguiente se reemplaza cada espacio por un carácter de subrayado:
string source = "The mountains are behind the clouds today.";
// Replace every occurrence of one character with another.
string updated = source.Replace(' ', '_');
Console.WriteLine(updated);
// => The_mountains_are_behind_the_clouds_today.
Ambas sobrecargas reemplazan todas las coincidencias de la cadena, no solo la primera. Tanto si pasa un solo carácter como una cadena, Replace sustituye todas las ocurrencias en una sola llamada.
Recorte del espacio en blanco
Use String.Trim, String.TrimStarty String.TrimEnd para quitar espacios en blanco iniciales o finales. Cada método devuelve una nueva cadena:
string source = " I'm wider than I need to be. ";
// Each method returns a new string with whitespace removed.
Console.WriteLine($"<{source.Trim()}>");
// => <I'm wider than I need to be.>
Console.WriteLine($"<{source.TrimStart()}>");
// => <I'm wider than I need to be. >
Console.WriteLine($"<{source.TrimEnd()}>");
// => < I'm wider than I need to be.>
Eliminar un intervalo de caracteres
El String.Remove método elimina una serie de caracteres a partir de un índice. Combínelo con String.IndexOf para buscar el texto que se va a quitar:
string source = "Many mountains are behind many clouds today.";
string toRemove = "many ";
// Find the text, then remove that span by index and length.
int index = source.IndexOf(toRemove);
string result = index >= 0
? source.Remove(index, toRemove.Length)
: source;
Console.WriteLine(result);
// => Many mountains are behind clouds today.
Reemplazar texto que coincida con un patrón
Cuando necesite reemplazar el texto que sigue un patrón en lugar de una cadena exacta, use expresiones regulares. El Regex.Replace método acepta una función que calcula cada reemplazo, por lo que puede conservar detalles como la mayúscula original. El patrón the\s coincide con "the" seguido de un carácter de espacio en blanco, lo que impide que coincida con "there":
string source = "The mountains are still there behind the clouds today.";
// Replace "the" or "The" followed by whitespace, preserving the original case.
// The \s in the pattern keeps "there" from matching.
string result = Regex.Replace(
source,
"""the\s""",
match => char.IsUpper(match.Value[0]) ? "Many " : "many ",
RegexOptions.IgnoreCase);
Console.WriteLine(result);
// => Many mountains are still there behind many clouds today.
Para la búsqueda basada en patrones en lugar de reemplazarla, vea Buscar cadenas en C#. Para obtener la sintaxis de expresiones regulares, consulte Referencia rápida del lenguaje de expresiones regulares.
Modificar caracteres individuales
Para cambiar los caracteres por posición, copie la cadena en un Span<T> de caracteres, modifique el intervalo y, a continuación, compile una nueva cadena a partir de ella. En el ejemplo siguiente se busca la palabra "fox" y se reemplaza por "cat":
string phrase = "The quick brown fox jumps over the fence.";
// A string is immutable, so copy it into a Span<char> to edit in place.
Span<char> characters = stackalloc char[phrase.Length];
phrase.CopyTo(characters);
int index = phrase.IndexOf("fox");
if (index != -1)
{
characters[index] = 'c';
characters[index + 1] = 'a';
characters[index + 2] = 't';
}
// Build a new string from the modified characters.
string updated = new string(characters);
Console.WriteLine(updated);
// => The quick brown cat jumps over the fence.
Para escenarios de alto rendimiento que evitan asignaciones intermedias, el entorno de ejecución proporciona API de nivel inferior, como String.Create. Esas técnicas son avanzadas; para el código diario, los métodos de este artículo son la opción adecuada.