文字列の大文字の前にスペースを挿入する
「ThisStringHasNoSpacesButItDoesHaveCapitals」のような文字列が与えられた場合、多くの開発者は大文字の前にスペースを挿入する方法を探しています。それを「この文字列にはスペースがありませんが、スペースはあります」に変換します。 Capitals."
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 中国語 Web サイトの他の関連記事を参照してください。