Maison >développement back-end >C++ >Comment puis-je insérer efficacement des espaces avant les lettres majuscules dans une chaîne, tout en gérant des acronymes ?

Comment puis-je insérer efficacement des espaces avant les lettres majuscules dans une chaîne, tout en gérant des acronymes ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-02 14:00:40156parcourir

How Can I Efficiently Insert Spaces Before Capital Letters in a String, While Handling Acronyms?

Insertion d'espaces avant les lettres majuscules dans les chaînes

Étant donné une chaîne comme "ThisStringHasNoSpacesButItDoesHaveCapitals", de nombreux développeurs recherchent des méthodes pour insérer des espaces avant les majuscules, en le transformant en "Cette chaîne n'a pas d'espaces mais elle en a Majuscules."

Bien que des expressions régulières puissent être utilisées, telles que System.Text.RegularExpressions.Regex.Replace(value, "[A-Z]", " $0"), elles présentent des inconvénients en termes de performances.

Une approche alternative consiste à utiliser une fonction personnalisée telle que :

string AddSpacesToSentence(string text)
{
    if (string.IsNullOrWhiteSpace(text))
        return "";
    StringBuilder newText = new StringBuilder(text.Length * 2);
    newText.Append(text[0]);
    for (int i = 1; i < text.Length; i++)
    {
        if (char.IsUpper(text[i]) &amp;&amp; text[i - 1] != ' ')
            newText.Append(' ');
        newText.Append(text[i]);
    }
    return newText.ToString();
}

Cette fonction surpasse l'approche regex, complétant 100 000 conversions de la chaîne "Abbbbbbbbb" répétées 100 fois en seulement 7,6 % du temps.

Gestion des acronymes

Pour répondre aux préoccupations potentielles concernant les acronymes, la fonction peut être modifié comme suit :

string AddSpacesToSentence(string text, bool preserveAcronyms)
{
    if (string.IsNullOrWhiteSpace(text))
        return "";
    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] != ' ' &amp;&amp; !char.IsUpper(text[i - 1])) ||
                (preserveAcronyms &amp;&amp; char.IsUpper(text[i - 1]) &amp;&amp;
                 i < text.Length - 1 &amp;&amp; !char.IsUpper(text[i + 1])))
                newText.Append(' ');
        newText.Append(text[i]);
    }
    return newText.ToString();
}

Cette fonction mise à jour conservera correctement les acronymes dans la chaîne formatée.

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