2012-04-12 3 views
5

델파이에서 코코아의 stringByTrimmingCharactersInSet과 동일한 기능이 있습니까?특정 문자셋으로 문자열 잘라 내기

내가 필요한 것은 문자열의 시작 또는 끝에있는 charset에 포함 된 모든 문자를 제거하는 것입니다. 문자열을 시작하거나 종료 할 수있는 문자열이 하나도 없거나 하나 이상있을 수 있습니다 ...

Delphi에서 가장 효율적인 방법은 무엇입니까?

답변

6

내가 아는 한 거기에 그런 RTL 기능이 존재하지 않습니다. 하지만 의 JclStrings 단위 부분에는 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 기능을 통해 영감을 얻는 것이 가장 좋은 솔루션이라고 생각합니다. 나는 이것이 그들의 라이센스에 관한 어떤 이슈도 제기하지 않기를 바란다 ... –

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

해결책이 잘 작동합니다. 다른 언급 된 솔루션 (JCL)에 대한 성능 테스트를 수행하고 여기에 결과를 게시 할 예정입니다. 성능은이 프로젝트의 핵심입니다. –

+0

정규 표현식이 JCL 코드보다 빠르지는 않습니다. 문자열을 트리밍하면 실제로 프로젝트의 병목 현상이 있습니까? –

+0

NLP 프로젝트에서 작업하고 있습니다. 이전 프레임 워크 버전은 Obj-C입니다. 이제는 델파이로 윈도우 버전으로 번역 중입니다. 파싱은 학습 모드에서 무겁습니다.이 기능은 구문 분석 된 단어 당 최소 한 번만 호출됩니다. 전체 책을 파싱합니다. JCL을 사용하면 해머를 사용하는 것처럼 느껴집니다. 개미를 죽여라. 더 빠를 필요는없고, 너무 느리지도 않다. –