Heim >Backend-Entwicklung >C++ >Wie kann ich beim Umgang mit Akronymen effizient Leerzeichen vor Großbuchstaben in einer Zeichenfolge einfügen?

Wie kann ich beim Umgang mit Akronymen effizient Leerzeichen vor Großbuchstaben in einer Zeichenfolge einfügen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-02 14:00:40161Durchsuche

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

Einfügen von Leerzeichen vor Großbuchstaben in Zeichenfolgen

Bei einer Zeichenfolge wie „ThisStringHasNoSpacesButItDoesHaveCapitals“ suchen viele Entwickler nach Methoden, um Leerzeichen vor Großbuchstaben einzufügen. umwandeln in „Diese Zeichenfolge hat keine Leerzeichen, aber sie hat.“ Großbuchstaben.“

Obwohl reguläre Ausdrücke wie System.Text.RegularExpressions.Regex.Replace(value, „[A-Z]“, „ $0“) verwendet werden können, bringen sie Leistungseinbußen mit sich.

Ein alternativer Ansatz ist die Verwendung einer benutzerdefinierten Funktion wie:

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

Diese Funktion übertrifft den Regex-Ansatz und vervollständigt 100.000 Konvertierungen der Zeichenfolge „Abbbbbbbbb“ werden 100 Mal in nur 7,6 % der Zeit wiederholt.

Akronymbehandlung

Um potenzielle Bedenken hinsichtlich Akronymen auszuräumen, kann die Funktion sein wie folgt geändert:

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

Diese aktualisierte Funktion behält Akronyme korrekt bei in der formatierten Zeichenfolge.

Das obige ist der detaillierte Inhalt vonWie kann ich beim Umgang mit Akronymen effizient Leerzeichen vor Großbuchstaben in einer Zeichenfolge einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn