Insertion d'espaces dans les transitions de casse
L'objectif est de transformer une chaîne comme "ThisStringHasNoSpacesButItDoesHaveCapitals" en "Cette chaîne n'a pas d'espaces mais elle en a Avoir des majuscules" en introduisant des espaces précédant les majuscules caractères.
Approche Regex
Les expressions régulières peuvent en effet être utilisées à cette fin. L'expression régulière "[A-Z]" identifie les lettres majuscules et "$0" ajoute un espace avant chaque correspondance :
System.Text.RegularExpressions.Regex.Replace(value, "[A-Z]", " <pre class="brush:php;toolbar:false">string AddSpacesToSentence(string text, bool preserveAcronyms) { if (string.IsNullOrWhiteSpace(text)) return string.Empty; StringBuilder newText = new StringBuilder(text.Length * 2); newText.Append(text[0]); for (int i = 1; i < text.Length; i++) { if (char.IsUpper(text[i])) if ((text[i - 1] != ' ' && !char.IsUpper(text[i - 1])) || (preserveAcronyms && char.IsUpper(text[i - 1]) && i < text.Length - 1 && !char.IsUpper(text[i + 1]))) newText.Append(' '); newText.Append(text[i]); } return newText.ToString(); }
Cependant, les expressions régulières peuvent être coûteuses en termes de calcul et moins lisibles pour les modèles complexes.
Approche itérative
Une approche alternative consiste à parcourir le caractère de chaîne en caractère :
Cette fonction vérifie la transition entre les caractères minuscules et majuscules, en gérant éventuellement les acronymes.
Comparaison des performances
En termes de performances , l'approche itérative surpasse considérablement l'approche regex, démontrant une réduction de 92,4 % du temps d'exécution pour une chaîne avec 1 000 lettres majuscules consécutives. Il troque la simplicité du code contre la rapidité.
En fin de compte, le choix entre ces approches dépend des exigences spécifiques de performances et de lisibilité de chaque projet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!