기본적으로 C#을 사용합니다. 거기에 내가 할 수있는 :문자열에서 문자 (또는 하위 문자열)를 자르는 방법은 무엇입니까?
string trimmed = str.Trim('\t');
문자열 str
에서 표를 잘라 내고 trimmed
에 결과를 반환 할 수 있습니다.
델파이 7에서 나는 단지 Trim
이라는 것을 발견했습니다.
어떻게 동일한 기능을 수행 할 수 있습니까?
기본적으로 C#을 사용합니다. 거기에 내가 할 수있는 :문자열에서 문자 (또는 하위 문자열)를 자르는 방법은 무엇입니까?
string trimmed = str.Trim('\t');
문자열 str
에서 표를 잘라 내고 trimmed
에 결과를 반환 할 수 있습니다.
델파이 7에서 나는 단지 Trim
이라는 것을 발견했습니다.
어떻게 동일한 기능을 수행 할 수 있습니까?
이 절차의 종류가 사는 곳 :
function TrimChar(const Str: string; Ch: Char): string;
var
S, E: integer;
begin
S:=1;
while (S <= Length(Str)) and (Str[S]=Ch) do Inc(S);
E:=Length(Str);
while (E >= 1) and (Str[E]=Ch) do Dec(E);
SetString(Result, PChar(@Str[S]), E - S + 1);
end;
당신은 StringReplace와를 사용할 수 있습니다
var
str:String;
begin
str:='The_aLiEn'+Chr(VK_TAB)+'Delphi';
ShowMessage(str);
str:=StringReplace(str, chr(VK_Tab), '', [rfReplaceAll]);
ShowMessage(str);
end;
이 주어진 문자열에서 모든 탭 문자를 생략합니다. 하지만 당신이 그것을 향상시킬 수 있습니다, 당신이 앞뒤로 탭을 누른 다음 Pos 기능을 사용할 수있는 제거하려는 경우.
편집 : 포스와 함께 할 방법을 묻는 의견에 대한 , 여기있다 :
var
str:String;
s, e: PChar;
begin
str:=Chr(VK_TAB)+Chr(VK_TAB)+'The_aLiEn'+Chr(VK_TAB)+'Delphi'+Chr(VK_TAB)+Chr(VK_TAB);
s:=PChar(str);
while Pos(Chr(VK_TAB), s)=1 do inc(s);
e:=s;
inc(e, length(s)-1);
while Pos(Chr(VK_TAB), e)=1 do dec(e);
str:=Copy(s, 1, length(s)-length(e)+1);
ShowMessage(str);
end;
그것은 물론 Maksee의에 의해 같은 방법이며 좀 더 작업을 같이 할 그것은. 그러나 작업을 완료 할 시간이 충분하지 않고 포지이 가장 먼저 생각해 본 것이면 다음과 같이 수행 할 수 있습니다. 프로그래머 은이고 은이어야한다고 생각합니다. 그리고 Pos를 char로 비교하기위한 약간의 조정을 통해 최적화의 제약을 말하면, 이것은 Maksee의 코드보다 빠르게 실행됩니다. SUBSTR 검색 일반화
편집 :
function TrimStr(const Source, SubStr: String): String;
var
s, e: PChar;
l: Integer;
begin
s:=PChar(Source);
l:=Length(SubStr);
while Pos(SubStr, s)=1 do inc(s, l);
e:=s;
inc(e, length(s)-l);
while Pos(SubStr, e)=1 do dec(e, l);
Result:=Copy(s, 1, length(s)-length(e)+l);
end;
내 질문을 읽어 보셨습니까? 문자열을 다듬을 필요가 있지만 그 안에있는 모든 탭을 바꿀 필요가 없습니다 – horgh
편집을 추가하고 있습니다) –
이 답변을 얻으려면 적어도 Pos 기능을 어떻게 생각하는지 설명하거나 설명해야합니다 이 작업을 위해 작동합니다. 그렇지 않으면 질문을 전혀 이해하지 못했던 것 같습니다. –
를 트림 기능을 수행 델파이에서 찾을보다 만들 때로는 쉽게 매개 변수를 사용하지 않지만 공백뿐만 아니라 다른 문자도 다듬을 수 있습니다. 여기에 코드 (XE2에서 System.SysUtils에서 나는이 변경되었습니다 생각하지 않는다)이다 :
function Trim(const S: string): string;
var
I, L: Integer;
begin
L := Length(S);
I := 1;
if (L > 0) and (S[I] > ' ') and (S[L] > ' ') then Exit(S);
while (I <= L) and (S[I] <= ' ') do Inc(I);
if I > L then Exit('');
while S[L] <= ' ' do Dec(L);
Result := Copy(S, I, L - I + 1);
end;
그것은 탭, 캐리지 리턴과 라인 피드와 같은 모든 제어 문자를 제거하는 것 '보다 아무것도 트리밍 .
Delphi는 사용자가 원하는 기능을 제공하지 않습니다. 기본 제공 Trim
함수는 항상 입력 문자열의 양쪽 끝에서 동일한 문자 집합 (공백 및 제어 문자)을 자릅니다. 여기에 몇 가지 대답은 임의의 문자를 자르기위한 기본 기술을 보여줍니다. 보시다시피 복잡하지 않아도됩니다. 여기 내 버전은 다음과 같습니다.
function Trim(const s: string; c: Char): string;
var
First, Last: Integer;
begin
First := 1;
Last := Length(s);
while (First <= Last) and (s[First] = c) do
Inc(First);
while (First < Last) and (s[Last] = c) do
Dec(last);
Result := Copy(s, First, Last - First + 1);
end;
여러 문자를 자르려면 각 루프에서 두 번째 조건어를 변경하기 만하면됩니다. 여러 글자를 어떻게 표현할지에 따라 글자를 바꿀 수 있습니다. C#은 배열을 사용합니다. 모든 문자를 문자열에 넣거나 Delphi의 기본 세트 유형을 사용할 수도 있습니다.당신 때문에,이 세트에 맞게 너무 크다 의미 델파이 2009, Char
의로 WideChar
의 별칭이다
function CharInArray(c: Char; ar: array of Char): Boolean;
var
i: Integer;
begin
Result := True;
for i := Low(ar) to High(ar) do
if ar[i] = c then
exit;
Result := False;
end;
// CharInString is identical, except for the type of `ar`.
리콜 :
function Trim(const s: string; const c: array of Char): string;
// Replace `s[x] = c` with `CharInArray(s[x], c)`.
function Trim(const s: string; const c: string): string;
// Replace `s[x] = c` with `CharInString(s[x], s)`.
function Trim(const s: string; const c: TSysCharSet): string;
// Replace `s[x] = c` with `s[x] in c`.
CharInArray
및 CharInString
기능을 쉽게 작성할 수 있습니다 입력이 항상 AnsiChar
에 맞을 것이라는 보장이 없으면 세트 버전을 사용할 수 없습니다. 또한 s[x] in c
구문은 WideChar
인수에 경고를 생성하므로 CharInSet(s[x], c)
을 대신 사용하려고합니다. (CharInArray
및 CharInString
달리, RTL이 필요 델파이 버전, 이미 CharInSet
을 제공합니다.)
는 선택적 매개 변수로 숯불의 배열을 받아 문자열 도우미 TStringHelper.Trim 있습니다.
function Trim(const TrimChars: array of Char): string; overload;
그래서, 당신은 당신의 예를 들어
trimmed := str.Trim([#09]);
를 사용할 수 있습니다. #09
은 탭 문자의 ASCII 코드입니다.
이 함수는 최소한 Delphi XE3 이후에 존재합니다.
희망이 있습니다.
제다이 JCL의 V2.7은 당신이 필요 이러한 유용한 기능을 제공합니다
function StrTrimCharLeft(const S: string; C: Char): string; 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; function StrTrimQuotes(const S: string): string;
당신이 정말로 당신은 문자열의 끝에서 "문자열"을 다듬을 의미합니까? 그건 System.String.Trim이 .Net에서하는 일이 아닙니다. 이 함수는 * 배열 * 문자를 받아 들인 다음 현재 문자열의 양쪽 끝에있는 모든 문자를 다듬습니다. 배열의 문자 순서는 부적합합니다. –