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
Patricia Arquetteoriginal
2024-12-26 13:39:09575parcourir

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]

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();
}
")

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!

Déclaration:
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