2012-04-12 1 views
5

Есть ли функция в Delphi, эквивалентная stringByTrimmingCharactersInSet Cocoa?Строка обрезки со специальной кодировкой

Мне нужно устранить все символы, входящие в набор символов, которые находятся в начале или в конце строки. Не может быть ни одного, ни одного или более начала или окончания строки ...

Что было бы самым эффективным способом сделать это в Delphi?

ответ

6

Насколько я знаю, нет такой функции RTL. Но вы можете проверить блок JclStringsJCL project, который включает в себя функции 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; 
+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

Спасибо David! Ваше решение работает fine.I'm собирается сделать некоторые тесты производительности против другого упомянутого решения (JCL) и опубликовать результаты here.Performance является ключом к этому проекту. –

+0

Регулярное выражение не будет быстрее кода JCL. Является ли обрезка строк действительно узким местом для вашего проекта? –

+0

Я работаю над проектом NLP. Предполагаемая каркасная версия - Obj-C. Теперь я переводил в Delphi, чтобы иметь версию Windows. Разбор силен в режиме обучения. Эта функция вызывается по крайней мере один раз за разглаженное слово. Я разбираю целые книги. Использование JCL только для этого похоже на использование молотка для убить муравей ... Это не нужно быть быстрее, просто не слишком медленнее. –