在字符串中的大写字母前插入空格
给定一个像“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]) && 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] != ' ' && !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(); }
此更新功能将正确保留格式化字符串中的首字母缩略词。
以上是在处理首字母缩略词时,如何有效地在字符串中的大写字母之前插入空格?的详细内容。更多信息请关注PHP中文网其他相关文章!