Maison > développement back-end > C++ > Comment insérer efficacement des espaces avant les majuscules dans une chaîne ?

Comment insérer efficacement des espaces avant les majuscules dans une chaîne ?

Patricia Arquette
Libérer: 2024-12-26 13:39:09
original
580 Les gens l'ont consulté

How to Efficiently Insert Spaces Before Capital Letters in a String?

Insérer des espaces avant les lettres majuscules

Lorsque vous traitez un texte contenant des lettres majuscules et minuscules, il est souvent souhaitable de séparer les mots en ajoutant des espaces avant les majuscules. Cela peut améliorer la lisibilité et faciliter la distinction entre différents mots.

Méthode Regex

Une approche courante consiste à utiliser une expression régulière pour rechercher et remplacer des lettres majuscules. précédé de lettres minuscules. L'expression régulière suivante correspondra à toutes les lettres majuscules précédées d'une lettre minuscule :

[A-Z]
Copier après la connexion

Pour insérer un espace avant ces lettres majuscules, vous pouvez utiliser le modèle de remplacement suivant :

\s<pre class="brush:php;toolbar:false">System.Text.RegularExpressions.Regex.Replace(value, "[A-Z]", "\s<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();
}
Copier après la connexion
")

Ceci Le modèle de remplacement utilise la classe de caractères s pour insérer un espace avant la lettre majuscule correspondante, tandis que $0 représente la sous-chaîne correspondante. Voici un exemple utilisant cette expression régulière :

Méthode manuelle

Bien que les expressions rationnelles puissent être efficaces, elles peuvent également être complexes et coûteuses en termes de performances. Une approche alternative consiste à parcourir manuellement la chaîne caractère par caractère et à insérer des espaces si nécessaire. L'extrait de code suivant illustre cette méthode :

Ce code parcourt chaque caractère de la chaîne et vérifie s'il est en majuscule. Si c'est le cas et qu'il est précédé d'une lettre minuscule (sauf si le paramètre PreserveAcronyms est défini sur true et que le caractère précédent est également majuscule), un espace est inséré.

Considérations relatives aux performances

La méthode regex peut être nettement plus lente que la méthode manuelle, en particulier pour les grandes chaînes. Cependant, la méthode manuelle est plus complexe et peut être moins lisible pour certains développeurs. En fin de compte, le meilleur choix entre ces deux méthodes dépend des exigences de performances et des préférences de lisibilité de votre projet spécifique.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal