在字串中的大寫字母前插入空格
給定一個像「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]) && 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] != ' ' && !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中文網其他相關文章!