Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
Cet article démontre plusieurs techniques pour produire un string en modifiant un string existant. Toutes les techniques présentées retournent le résultat des modifications en tant que nouvel string objet. Pour démontrer que les chaînes d’origine et modifiées sont des instances distinctes, les exemples stockent le résultat dans une nouvelle variable. Vous pouvez examiner l’original string et le nouveau, modifié string lorsque vous exécutez chaque exemple.
Il existe plusieurs techniques présentées dans cet article. Vous pouvez remplacer le texte existant. Vous pouvez rechercher des modèles et remplacer le texte correspondant par d’autres textes. Vous pouvez traiter une chaîne comme une séquence de caractères. Vous pouvez également utiliser des méthodes pratiques qui suppriment l’espace blanc. Choisissez les techniques qui correspondent le plus étroitement à votre scénario.
Remplacer le texte
Le code suivant crée une chaîne en remplaçant le texte existant par un substitut.
string source = "The mountains are behind the clouds today.";
// Replace one substring with another with String.Replace.
// Only exact matches are supported.
var replacement = source.Replace("mountains", "peaks");
Console.WriteLine($"The source string is <{source}>");
Console.WriteLine($"The updated string is <{replacement}>");
Le code précédent illustre cette propriété immuable de chaînes. Vous pouvez voir dans l’exemple précédent que la chaîne d’origine, sourcen’est pas modifiée. La String.Replace méthode crée une nouvelle string contenant les modifications.
La Replace méthode peut remplacer des chaînes ou des caractères uniques. Dans les deux cas, chaque occurrence du texte recherché est remplacée. L’exemple suivant remplace tous les « caractères » par « _ » :
string source = "The mountains are behind the clouds today.";
// Replace all occurrences of one char with another.
var replacement = source.Replace(' ', '_');
Console.WriteLine(source);
Console.WriteLine(replacement);
La chaîne source est inchangée et une nouvelle chaîne est retournée avec le remplacement.
Découper l’espace blanc
Vous pouvez utiliser les méthodes String.Trim, String.TrimStart et String.TrimEnd pour supprimer tout espace blanc en début ou en fin de texte. Le code suivant montre un exemple de chaque. La chaîne source ne change pas ; ces méthodes retournent une nouvelle chaîne avec le contenu modifié.
// Remove trailing and leading white space.
string source = " I'm wider than I need to be. ";
// Store the results in a new string variable.
var trimmedResult = source.Trim();
var trimLeading = source.TrimStart();
var trimTrailing = source.TrimEnd();
Console.WriteLine($"<{source}>");
Console.WriteLine($"<{trimmedResult}>");
Console.WriteLine($"<{trimLeading}>");
Console.WriteLine($"<{trimTrailing}>");
Supprimer du texte
Vous pouvez supprimer du texte d’une chaîne à l’aide de la String.Remove méthode. Cette méthode supprime le nombre spécifié de caractères commençant à un index spécifique. L’exemple suivant montre comment utiliser String.IndexOf suivi de Remove supprimer du texte d’une chaîne :
string source = "Many mountains are behind many clouds today.";
// Remove a substring from the middle of the string.
string toRemove = "many ";
string result = string.Empty;
int i = source.IndexOf(toRemove);
if (i >= 0)
{
result= source.Remove(i, toRemove.Length);
}
Console.WriteLine(source);
Console.WriteLine(result);
Remplacer les modèles correspondants
Vous pouvez utiliser des expressions régulières pour remplacer les modèles de correspondance de texte par un nouveau texte, éventuellement défini par un modèle. L’exemple suivant utilise la System.Text.RegularExpressions.Regex classe pour rechercher un modèle dans une chaîne source et le remplacer par une mise en majuscule appropriée. La Regex.Replace(String, String, MatchEvaluator, RegexOptions) méthode prend une fonction qui fournit la logique du remplacement comme l’un de ses arguments. Dans cet exemple, cette fonction LocalReplaceMatchCase est une fonction locale déclarée à l’intérieur de l’exemple de méthode.
LocalReplaceMatchCase utilise la System.Text.StringBuilder classe pour générer la chaîne de remplacement avec une mise en majuscule appropriée.
Les expressions régulières sont les plus utiles pour rechercher et remplacer du texte qui suit un modèle, plutôt que du texte connu. Pour plus d’informations, consultez Comment rechercher des chaînes de caractères. Le modèle de recherche « the\s » recherche le mot « the » suivi d’un caractère d’espace blanc. Cette partie du modèle empêche qu’il ne corresponde à « there » dans la chaîne source. Pour plus d’informations sur les éléments du langage d’expression régulière, consultez Le langage d’expression régulière - Informations de référence rapides.
string source = "The mountains are still there behind the clouds today.";
// Use Regex.Replace for more flexibility.
// Replace "the" or "The" with "many" or "Many".
// using System.Text.RegularExpressions
string replaceWith = "many ";
source = System.Text.RegularExpressions.Regex.Replace(source, """the\s""", LocalReplaceMatchCase,
System.Text.RegularExpressions.RegexOptions.IgnoreCase);
Console.WriteLine(source);
string LocalReplaceMatchCase(System.Text.RegularExpressions.Match matchExpression)
{
// Test whether the match is capitalized
if (Char.IsUpper(matchExpression.Value[0]))
{
// Capitalize the replacement string
System.Text.StringBuilder replacementBuilder = new System.Text.StringBuilder(replaceWith);
replacementBuilder[0] = Char.ToUpper(replacementBuilder[0]);
return replacementBuilder.ToString();
}
else
{
return replaceWith;
}
}
La StringBuilder.ToString méthode retourne une chaîne immuable avec le contenu de l’objet StringBuilder .
Modification de caractères individuels
Vous pouvez produire un tableau de caractères à partir d’une chaîne, modifier le contenu du tableau, puis créer une chaîne à partir du contenu modifié du tableau.
L’exemple suivant montre comment remplacer un ensemble de caractères dans une chaîne. Tout d’abord, il utilise la String.ToCharArray() méthode pour créer un tableau de caractères. Il utilise la IndexOf méthode pour rechercher l’index de départ du mot « fox ». Les trois caractères suivants sont remplacés par un mot différent. Enfin, une nouvelle chaîne est construite à partir du tableau de caractères mis à jour.
string phrase = "The quick brown fox jumps over the fence";
Console.WriteLine(phrase);
char[] phraseAsChars = phrase.ToCharArray();
int animalIndex = phrase.IndexOf("fox");
if (animalIndex != -1)
{
phraseAsChars[animalIndex++] = 'c';
phraseAsChars[animalIndex++] = 'a';
phraseAsChars[animalIndex] = 't';
}
string updatedPhrase = new string(phraseAsChars);
Console.WriteLine(updatedPhrase);
Créer de manière programmatique du contenu de chaîne
Étant donné que les chaînes sont immuables, les exemples précédents créent tous des chaînes temporaires ou des tableaux de caractères. Dans les scénarios de haute performance, il est souhaitable d’éviter ces allocations de tas. .NET fournit une String.Create méthode qui vous permet de remplir de manière programmatique le contenu de caractères d’une chaîne via un rappel tout en évitant les allocations temporaires de chaînes intermédiaires.
// constructing a string from a char array, prefix it with some additional characters
char[] chars = [ 'a', 'b', 'c', 'd', '\0' ];
int length = chars.Length + 2;
string result = string.Create(length, chars, (Span<char> strContent, char[] charArray) =>
{
strContent[0] = '0';
strContent[1] = '1';
for (int i = 0; i < charArray.Length; i++)
{
strContent[i + 2] = charArray[i];
}
});
Console.WriteLine(result);
Vous pouvez modifier une chaîne dans un bloc fixe avec du code non sécurisé, mais il est fortement déconseillé de modifier le contenu de la chaîne après la création d’une chaîne. Cela provoque des bogues imprévisibles. Par exemple, si quelqu'un internent une chaîne de caractères identique à la vôtre, ils obtiennent votre copie et ne s'attendaient pas à ce que vous modifiez leur chaîne.