Delphi中是否有與Cocoa的stringByTrimmingCharactersInSet
相同的功能?使用特定字符集修剪字符串
我需要的是消除包含在字符串開頭或結尾的字符集中的所有字符。可以沒有,一個或多個開始或結束的字符串...
什麼是最有效的方法來做到這一點在德爾福?
Delphi中是否有與Cocoa的stringByTrimmingCharactersInSet
相同的功能?使用特定字符集修剪字符串
我需要的是消除包含在字符串開頭或結尾的字符集中的所有字符。可以沒有,一個或多個開始或結束的字符串...
什麼是最有效的方法來做到這一點在德爾福?
據我所知,不存在這樣的RTL函數。但是您可以查看JCL project的JclStrings
單元部分,其中包括StrTrimCharsLeft
和 StrTrimCharsRight
函數。
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;
據我所知,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;
我敢肯定這是不是表現最好的解決方案,但是這將是很難找到的東西要簡單得多。
謝謝大衛!你的解決方案的工作fine.I'm要做到對上述其他溶液(JCL)一些性能測試並公佈結果here.Performance的關鍵是這個項目。 – 2012-04-12 11:02:19
正則表達式不會比JCL代碼更快。修剪字符串是否真的成爲您項目的瓶頸? – 2012-04-12 11:07:12
我正在研究NLP項目。以前的框架版本是Obj-C。現在我正在翻譯成德爾福有一個Windows版本。在學習模式下解析是沉重的。這個函數被稱爲至少一次每個解析word.I'm解析整本書。使用JCL只是爲了這個感覺就像用錘子來殺死一隻螞蟻......它不需要更快,只是不會太慢。 – 2012-04-12 11:19:40
謝謝!我相信最好的解決方案是採取@David Heffernan的建議,並創建「靈感來自」等效的JCL函數,而不是使用整個框架。我希望這不會引起有關其許可的任何問題...... – 2012-04-12 12:02:57