2012-04-12 52 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