文を含む C# 文字列があります。これらの文は問題ない場合もあれば、ユーザーが生成したランダムな文字である場合もあります。私がやりたいのは、これらの文の中の単語を削除することです。たとえば、次の文字列があるとします。
var stringWithLongWords = "Here's a text with tooooooooooooo long words";
これをフィルターを通して実行したいと思います:
var trimmed = TrimLongWords(stringWithLongWords, 6);
そして、すべての単語に最大 6 文字しか含めることができない出力を取得するには、次のようにします。
"Here's a text with tooooo long words"
良いパフォーマンスでこれを行う方法はありますか? これを自動的に処理できる.NETに何かありますか?
現在、次のコードを使用しています。
private static string TrimLongWords(string original, int maxCount)
{
return string.Join(" ", original.Split(' ').Select(x => x.Substring(0, x.Length > maxCount ? maxCount : x.Length)));
}
これは理論的には機能しますが、長い単語がスペース以外の区切り文字で終わっている場合、悪い出力が得られます。例えば:
これはスウィーエエエエエエエエエエエエエエエエエエエッ!そしてもっと何か。
最終的には次のようになります。
これはsweeeeeeeです そして何かもっと。
アップデート:
OK、コメントがとても良かったので、これには「もしも」が多すぎるかもしれないことに気付きました。セパレーターを忘れた方がいいかもしれません。代わりに、単語がトリミングされた場合、3 つのドットで表示される可能性があります。最大 5 文字に短縮された単語の例を次に示します。
地獄の黙示録!-> アポカ…今!
黙示録!-> アポカ...
!例!-> !試験...
これはスウィーエエエエエエエエエエエエエエエエエエエッ!そしてもっと何か。- > これはスィーイー...そして何か...もっと。