ホームページ >バックエンド開発 >C++ >文字列の大文字の前にスペースを効率的に挿入するにはどうすればよいですか?

文字列の大文字の前にスペースを効率的に挿入するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-29 21:21:15783ブラウズ

How to Efficiently Insert Spaces Before Uppercase Letters in a String?

ケース遷移へのスペースの挿入

目的は、「ThisStringHasNoSpacesButItDoesHaveCapitals」のような文字列を「この文字列にはスペースがありませんが、あります」に変換することです。大文字の前にスペースを導入することで「大文字を使用」

正規表現アプローチ

正規表現は実際にこの目的に使用できます。正規表現「[A-Z]」は大文字を識別し、「 $0」は各一致の前にスペースを追加します。

System.Text.RegularExpressions.Regex.Replace(value, "[A-Z]", " <pre class="brush:php;toolbar:false">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();
}
")

ただし、正規表現は計算コストが高く、複雑なパターンの場合は読みにくくなる可能性があります。

反復アプローチ

代替アプローチは反復です。

この関数は、オプションで頭字語を処理しながら、小文字から大文字への移行をチェックします。

パフォーマンスの比較

パフォーマンスの点では、反復アプローチは正規表現アプローチよりも大幅に優れており、 1,000 個連続する大文字を含む文字列の実行時間が 92.4% 短縮されました。コードの簡素化と速度のトレードオフになります。

最終的に、これらのアプローチのどちらを選択するかは、各プロジェクトの特定のパフォーマンスと読みやすさの要件によって決まります。

以上が文字列の大文字の前にスペースを効率的に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。