Les chaînes de caractères sont utilisées dans presque tous les programmes : noms, messages, chemins, données de formulaire ou contenu de fichiers. C# fournit de nombreuses méthodes pour les nettoyer, les rechercher, les découper et les transformer. Cette deuxième série C# Console présente les méthodes les plus utiles avec des exemples simples.
Préparer un projet Console
Créez un projet puis exécutez-le avec le SDK .NET :
dotnet new console -n StringExamples
cd StringExamples
dotnet run
Supprimer les espaces avec Trim
Trim enlève les espaces au début et à la fin. TrimStart et TrimEnd ciblent un seul côté.
string saisie = " Maximum Yazılım ";
Console.WriteLine(saisie.Trim());
Maximum Yazılım
La chaîne d’origine n’est pas modifiée : les chaînes C# sont immuables et la méthode renvoie une nouvelle valeur.
Modifier la casse
ToUpper et ToLower transforment l’affichage. Pour une opération dépendante de la culture, précisez la culture souhaitée. Pour des clés techniques et comparaisons internes, utilisez souvent les variantes invariant ou un StringComparison explicite.
string language = "CSharp";
Console.WriteLine(language.ToUpperInvariant());
Console.WriteLine(language.ToLowerInvariant());
Rechercher avec Contains, StartsWith et EndsWith
string fileName = "rapport-2026.pdf";
Console.WriteLine(fileName.Contains("2026", StringComparison.OrdinalIgnoreCase));
Console.WriteLine(fileName.StartsWith("rapport", StringComparison.OrdinalIgnoreCase));
Console.WriteLine(fileName.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase));
Le paramètre StringComparison rend l’intention explicite et évite certaines erreurs liées à la casse ou à la culture.
Trouver une position avec IndexOf
IndexOf renvoie l’index de la première occurrence, ou -1 si la valeur n’existe pas.
string email = "info@maximumyazilim.com";
int atIndex = email.IndexOf('@');
Console.WriteLine(atIndex);
Vérifiez toujours que le résultat est supérieur ou égal à zéro avant de l’utiliser dans une découpe.
Remplacer du texte
string message = "Projet en attente";
string updated = message.Replace("en attente", "prêt");
Console.WriteLine(updated);
Replace effectue un remplacement littéral. Pour des règles complexes, les expressions régulières peuvent convenir, mais elles doivent rester lisibles et testées.
Découper avec Split
string tags = "web,seo,csharp";
string[] values = tags.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
foreach (string value in values)
{
Console.WriteLine(value);
}
web
seo
csharp
Les options permettent d’ignorer les entrées vides et de nettoyer les espaces. Pour un fichier CSV réel, utilisez une bibliothèque dédiée, car les guillemets et séparateurs échappés rendent le format plus complexe.
Extraire avec Substring ou les plages
string code = "TR-2026-001";
string country = code[..2];
string number = code[3..];
Console.WriteLine($"{country} / {number}");
Les plages modernes rendent certaines opérations plus lisibles. Vérifiez tout de même la longueur d’une donnée externe avant de l’indexer.
Construire avec Join
string[] technologies = { "C#", ".NET", "SQL" };
string result = string.Join(" · ", technologies);
Console.WriteLine(result);
C# · .NET · SQL
Join est généralement préférable à une boucle qui concatène manuellement des séparateurs.
Interpolation et formatage
string project = "API";
decimal price = 12500m;
Console.WriteLine($"Projet : {project} | Budget : {price:N2} TL");
L’interpolation améliore la lisibilité. Les formats numériques et de date dépendent de la culture courante ; pour une sortie destinée à une API ou à un fichier technique, choisissez explicitement une culture stable.
Vérifier les valeurs vides
string? input = Console.ReadLine();
if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("Une valeur est requise.");
}
IsNullOrWhiteSpace couvre null, chaîne vide et espaces. C’est souvent le premier contrôle avant une transformation.
StringBuilder pour de nombreuses concaténations
Les chaînes étant immuables, une boucle avec de très nombreuses concaténations peut créer beaucoup d’objets. StringBuilder convient lorsque vous construisez progressivement un texte volumineux.
using System.Text;
var builder = new StringBuilder();
for (int i = 1; i <= 3; i++)
{
builder.AppendLine($"Ligne {i}");
}
Console.WriteLine(builder.ToString());
Bonnes pratiques
- Validez les données externes avant les index et découpes.
- Choisissez explicitement StringComparison pour les comparaisons importantes.
- N’utilisez pas une conversion de casse comme unique règle de sécurité.
- Préférez les méthodes lisibles aux expressions régulières inutilement complexes.
- Ajoutez des tests avec chaînes nulles, vides, Unicode et très longues.
Conclusion
Trim, Contains, Replace, Split, Join, l’interpolation et StringBuilder couvrent une grande partie du travail quotidien sur les chaînes C#. Comprendre l’immutabilité, la culture et la comparaison permet d’éviter les erreurs subtiles. Testez chaque transformation avec les données réelles que votre application doit accepter.