首页 >后端开发 >C++ >在处理首字母缩略词时,如何有效地在字符串中的大写字母之前插入空格?

在处理首字母缩略词时,如何有效地在字符串中的大写字母之前插入空格?

Linda Hamilton
Linda Hamilton原创
2025-01-02 14:00:40161浏览

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

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

给定一个像“ThisStringHasNoSpacesButItDoesHaveCapitals”这样的字符串,许多开发人员寻求在大写字母前插入空格的方法,将其转换为“这个字符串没有空格,但它确实有大写字母。”

虽然可以使用正则表达式,例如 System.Text.RegularExpressions.Regex.Replace(value, "[A-Z]", " $0"),但它们存在性能缺陷。

另一种方法是使用自定义函数,例如:

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

此函数优于正则表达式方法,完成字符串“Abbbbbbbbb”的 100,000 次转换仅在 7.6% 的时间内重复 100 次。

缩写词处理

为了解决有关缩写词的潜在问题,该函数可以是修改如下:

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