栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在大写字母之前添加空格

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在大写字母之前添加空格

正则表达式可以很好地工作(我什至投票赞成马丁·布朗的答案),但是它们很昂贵(而且我个人发现任何模式都比几个字符长得令人讨厌的更长)

该功能

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

它将在9686.850个滴答声中执行100,000次,正则表达式将花费25,000,000个滴答声(并且已编译正则表达式)。

给定更好(即更快)的值会更好,但是需要维护更多代码。“更好”通常是竞争需求的折衷方案。

希望这可以帮助 :)

更新
自从我看了好一阵子以来,我才意识到自从代码更改(只是更改了一点)以来,时序没有更新。

在具有“
Abbbbbbbbb”的字符串重复100次(即1,000个字节)的情况下,运行100,000次转换需要手工编码函数4,517,177个滴答,而下面的正则表达式则需要59,435,719个滴答声,使得手工编码函数的运行时间为7.6%。正则表达式。

更新2是否 会考虑首字母缩写词?现在会!if陈述的逻辑相当模糊,因为您可以看到将其扩展到此…

if (char.IsUpper(text[i]))    if (char.IsUpper(text[i - 1]))        if (preserveAcronyms && i < text.Length - 1 && !char.IsUpper(text[i + 1])) newText.Append(' ');        else ;    else if (text[i - 1] != ' ')        newText.Append(' ');

…根本没有帮助!

这是不用担心缩写词的原始 简单 方法

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]) && text[i - 1] != ' ')     newText.Append(' '); newText.Append(text[i]);        }        return newText.ToString();}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506781.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号