首頁 >後端開發 >C++ >在處理首字母縮寫時,如何有效地在字串中的大寫字母之前插入空格?

在處理首字母縮寫時,如何有效地在字串中的大寫字母之前插入空格?

Linda Hamilton
Linda Hamilton原創
2025-01-02 14:00:40182瀏覽

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

在字串中的大寫字母前插入空格

給定一個像「ThisStringHasNoSpacesButItDoesHaveCap itals」這樣的字串,許多開發人員尋求在大寫字母前插入空格的方法,將其轉換為「這個字串沒有空格,但它確實有大寫字母。式,例如System.Text.RegularExpressions.Regex.Replace(value, "[A-Z]", " $0"),但它們有效能缺陷。

另一種方法是使用自訂函數,例如:

此函數優於正規表示式方法,完成字串「Abbbbbbbbb」的100,000 次轉換僅在7.6%的時間內重複100 次。
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();
}

縮寫處理

為了解決有關縮寫的潛在問題,函數可以是修改如下:

此函數可以是修改如下:
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();
}

此更新功能將正確保留格式化字串中的首字母縮寫。

以上是在處理首字母縮寫時,如何有效地在字串中的大寫字母之前插入空格?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn