2012-04-12 3 views
5

Delphiには、ココアのstringByTrimmingCharactersInSetと同等の機能がありますか?特定の文字セットの文字列を切り取ります

私が必要とするのは、文字列の先頭または末尾にある文字セットに含まれるすべての文字を削除することです。文字列を開始または終了する文字列はありません。

これはDelphiで最も効率的な方法は何でしょうか?

答えて

6

これまでのところ、RTL関数は存在しません。しかしStrTrimCharsLeftStrTrimCharsRight機能を含むJCL projectJclStringsユニット部分を確認することができます。

function StrTrimCharsLeft(const S: string; const Chars: TCharValidator): string; overload; 
function StrTrimCharsLeft(const S: string; const Chars: array of Char): string; overload; 
function StrTrimCharRight(const S: string; C: Char): string; 
function StrTrimCharsRight(const S: string; const Chars: TCharValidator): string; overload; 
function StrTrimCharsRight(const S: string; const Chars: array of Char): string; overload; 
+0

ありがとうございます!@David Heffernanのアドバイスを受けて、フレームワーク全体を使用するのではなく、同等のJCL関数に触発するのが最良のソリューションだと思います。私はこれがライセンスに関する問題を提起しないことを願っています... –

1

私の知る限りでは、RTLにはそのような機能は含まれていません。あなたはギャップを埋めるために正規表現を使用できます。

function MyTrim(const Input: string; const TrimChars: string): string; 
begin 
    Result := TRegEx.Replace(Input, Format('^[%s]*', [TrimChars]), ''); 
    Result := TRegEx.Replace(Result, Format('[%s]*$', [TrimChars]), ''); 
end; 

私はこれが最善のパフォーマンスのソリューションではありませんが、はるかに簡単なものを見つけるのは難しいだろう、かなり確信しています。

+0

はあなたにデビッドありがとう!あなたのソリューションは、fine.I'mが、他の上記溶液(JCL)に対して、いくつかのパフォーマンステストを行い、その結果をhere.Performanceがこのプロジェクトの鍵である公開しようとして動作します。 –

+0

正規表現はJCLコードより高速ではありません。文字列をトリミングすることは実際にプロジェクトのボトルネックになっていますか? –

+0

私はNLPプロジェクトに取り組んでいます。前のフレームワークバージョンはObj-Cです。今、私はDelphiにWindows版を翻訳しています。構文解析は学習モードの下で重いです。この関数は、解析された単語ごとに少なくとも1回呼び出されます。私は全書籍を解析しています.JCLを使用すると、蟻を殺す...もっと速くする必要はありませんが、遅くする必要はありません。 –