2012-04-12 53 views
5

Delphi中是否有與Cocoa的stringByTrimmingCharactersInSet相同的功能?使用特定字符集修剪字符串

我需要的是消除包含在字符串開頭或結尾的字符集中的所有字符。可以沒有,一個或多個開始或結束的字符串...

什麼是最有效的方法來做到這一點在德爾福?

回答

6

據我所知,不存在這樣的RTL函數。但是您可以查看JCL projectJclStrings單元部分,其中包括StrTrimCharsLeftStrTrimCharsRight函數。

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函數,而不是使用整個框架。我希望這不會引起有關其許可的任何問題...... – 2012-04-12 12:02:57

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的關鍵是這個項目。 – 2012-04-12 11:02:19

+0

正則表達式不會比JCL代碼更快。修剪字符串是否真的成爲您項目的瓶頸? – 2012-04-12 11:07:12

+0

我正在研究NLP項目。以前的框架版本是Obj-C。現在我正在翻譯成德爾福有一個Windows版本。在學習模式下解析是沉重的。這個函數被稱爲至少一次每個解析word.I'm解析整本書。使用JCL只是爲了這個感覺就像用錘子來殺死一隻螞蟻......它不需要更快,只是不會太慢。 – 2012-04-12 11:19:40