• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi中常用字符串处理函数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
1.copy(str,pos,num) 从str字符串的pos处开始,截取num个字符的串返回.
假设str为'abcdef',copy(str,3,2)='cd',copy(str,4,10)='def' 
2.concat(str1,str2{,strn}) 把各自变量连接起来,返回连接后的字符串(长度不能超过255) 
3.length(str)       返回str的字符个数,即其长度. 
4.pos(obj,target)   在target字符串中找出第一个出现obj的第一个字符位置,如果找不到,返回0. 
5.AnsiStrLastChar('你好')结果是“好”。如果有半个汉字出现,返回这半个汉字。二者字符串长度分别为2和1。 
6.CompareStr  - 区分大小写 
7.CompareText - 不区分大小写 
8.StringReplace(const S, OldPattern, NewPattern: string;Flags: TReplaceFlags): string;
字符串替换函数,需要引用SysUtils单元
rfReplaceAll:全部替换 
rfIgnoreCase:忽略大小写
使用方法Lg:
  str:='01231142211655767';//需要把:替换成----
s:=StringReplace(str,'','----',[rfReplaceAll]);
For Example:

var
aStr: String;
begin
aStr := 'This is a book, not a pen!';
ShowMessage(StringReplace (aStr, 'a', 'two', []));   //This is two book, not a pen!只替换了第一个符合的字
ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));
//This is two book, not two pen!替换了所有符合的字
aStr := 'This is a book, not A pen!';
ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));   //This is two book, not A pen!只替换了符合的字(小写a)
ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll, rfIgnoreCase]));   //This is two book, not two pen!不管大小写替换了所有符合的字
end;

9.delete 是删除一个 字符串中的 某部分字符
用法是 delete(str,//被删除的字符串 
              index,//从第几个字符开始删除
              count //删除几个
              );
Delete(S, 2, 2); 就是从S中的第二个开始删除,删除2个字符即2、3.所以结果是145. 
////////////////////////////////////////////////////////
LEFTSTR, MIDSTR, RIGHTSTR的介绍
这几个函数都包含在StrUtils中,所以需要uses StrUtils; 
假设字符串是 Dstr := ’Delphi is the BEST’, 那么 
LeftStr(Dstr, 5) := ’Delph’ 
MidStr(Dstr, 6, 7) := ’i is th’ 
RightStr(Dstr, 6) := ’e BEST’



8.{判断字符是否是数字} 
function IsDigit(ch: char): boolean; 
begin 
  Result := ch in ['0'..'9']; 
end; 

9{判断字符是否是大写字符} 
function IsUpper(ch: char): boolean; 
begin 
  Result := ch in ['A'..'Z']; 
end; 
10{判断字符是否是小写字符} 
function IsLower(ch: char): boolean; 
begin 
  Result := ch in ['a'..'z']; 
end; 
11{转换为大写字符} 
function ToUpper(ch: char): char; 
begin 
  Result := chr(ord(ch) and $DF); 
end; 
12{转换为小写字符} 
function ToLower(ch: char): char; 
begin 
  Result := chr(ord(ch) or $20); 
end; 
{ Capitalizes first letter of every word in s } 

function Proper(const s: string): string; 
var 
  i: Integer; 
  CapitalizeNextLetter: Boolean; 
begin 
  Result := LowerCase(s); 
  CapitalizeNextLetter := True; 
  for i := 1 to Length(Result) do 
  begin 
    if CapitalizeNextLetter and IsLower(Result[i]) then 
      Result[i] := ToUpper(Result[i]); 
    CapitalizeNextLetter := Result[i] = ' '; 
  end; 
end; 
//////////////////////////////////////////////////////////// 
13.{返回两个子字符串之间字符的个数} 
Function p2pcount( s, ss1, ss2 : string ): integer; 
var i, j, slen : integer; 
begin 
   i := pos( ss1, s ); 
   j := pos( ss2, s ); 
   slen := Length(ss2); 
   if j >= i then Result := j - i + slen else Result := 0; 
end; 
14.{更快速的字符查询,快40%} 
function ScanStr(ToScan: PChar; Sign: Char):PChar; 
begin 
  Result:= nil; 
  if ToScan <> nil then 
    while (ToScan^ <> #0) do begin 
      if ToScan^ = Sign then begin 
        Result:= ToScan; 
        break; 
       end; 
     inc(ToScan); 
    end; 
end; 
///////////////////////////// 
15.替换字符串中子串的函数,他可以从字符串中找出指定子串,并替换为另一子串。 
function replacing(S,source,target:string):string; 
var site,StrLen:integer; 
begin 
{source在S中出现的位置} 
site:=pos(source,s); 
{source的长度} 
StrLen:=length(source); 
{删除source字符串} 
delete(s,site,StrLen); 
{插入target字符串到S中} 
insert(target,s,site); 
{返回新串} 
replacing:=s; 
end; 
/////////////////////// 
另两个替换字符串中子串的函数 
function repl_substr( sub1, sub2, s: string ): string; 
var i: integer; 
begin 
   repeat 
     i := pos( sub1, s ) ; 
     if i > 0 then begin 
       delete( s, i, Length(sub1)); 
       insert( sub2, s, i ); 
     end; 
   until i < 1; 
   Result := s; 
end; 
function ReplaceText(const S,ReplacePiece,ReplaceWith: String):String; 
Var Position: Integer; 
    TempStr: String; 
begin 
  Position := Pos(ReplacePiece,S); 
  if Position > 0 then Begin 
    TempStr := S; 
    Delete(TempStr,1,Position-1+Length(ReplacePiece)); 
    Result := 
Copy(S,1,Position-1)+ReplaceWith+ReplaceText(TempStr,ReplacePiece,ReplaceWith) 
  End else Result := S; 
end; 
//////////////////////// 
替换全部子字符串的函数 
  function ReplaceSub(str, sub1, sub2: String): String; 
    var 
    aPos: Integer; 
    rslt: String; 
  begin 
    aPos := Pos(sub1, str); 
    rslt := ''; 
    while (aPos <> 0) do begin 
      rslt := rslt + Copy(str, 1, aPos - 1) + sub2; 
      Delete(str, 1, aPos + Length(sub1)); 
      aPos := Pos(sub1, str); 
    end; 
    Result := rslt + str; 
  end; 
///////////////////////// 
在字符串左右填充指定数量的指定字符 
function UT_PadString(inString :string; maxLength :integer; padChar :char; 
left :boolean) :string; 
begin 
  result := inString; 
  while (Length(result) < maxLength) do 
    if (left) then 
      result := padChar + result 
    else 
      result := result + padChar; 
end; 
///////////////////////////////////// 
提取字符串中指定子字符串前的字符串 
Function Before ( string ; Var S:string ) : string ; < /span>
  Var 
  F : Word ; 
begin 
  F := POS (Src,S) ; 
  if F=0 then 
    Before := S 
   else 
    Before := COPY(S,1,F-1) ; 
end ; 
////////////////////////////////// 
提取字符串中指定子字符串后的字符串 
Function After ( string ; Var S:string ) : string ; < /span>
  Var 
  F : Word ; 
begin 
  F := POS (Src,S) ; 
  if F=0 then 
    After := '' 
   else 
    After := COPY(S,F+length(src),length(s)) ; 
end ; 
//////////////////////////////////// 
判断字符串是否可以转换为整数 
function IsIntStr(const S: string): boolean; 
begin 
  Result:=StrToIntDef(S,0)=StrToIntDef(S,1); 
end; 
////////////////////////////////////// 
从字符串中删除指定字符串 
procedure RemoveInvalid(what, where: string): string; 
  var 
  tstr: string; 
begin 
  tstr:=where; 
  while pos(what, tstr)>0 do 
    tstr:=copy(tstr,1,pos(what,tstr)-1) + 
       copy(tstr,pos(what,tstr)+length(tstr),length(tstr)); 
  Result:=tstr; 
end; 
用法: 
  NewStr:=RemoveInvalid('<invalid>','This <invalid> is my string and I wan to 
       remove the word <invalid>'); 
/////////////////////////////////////////// 
根据某个字符分割字符串的函数 
procedure SeparateTerms(s : string;Separator : char;Terms : TStringList); 
{ This browses a string and divide it into terms whenever the given 
  separator is found. The separators will be removed } 
  var 
  hs : string; 
  p : integer; 
begin 
  Terms.Clear; // First remove all remaining terms 
  if Length(s)=0 then   // Nothin' to separate 
    Exit; 
  p:=Pos(Separator,s); 
  while P<>0 do 
  begin 
    hs:=Copy(s,1,p-1);   // Copy term 
    Terms.Add(hs);       // Add to list 
    Delete(s,1,p);       // Remove term and separator 
    p:=Pos(Separator,s); // Search next separator 
  end; 
  if Length(s)>0 then 
    Terms.Add(s);        // Add remaining term 
end; 
========== 
= 用  法 
========== 
var 
Terms : TStringList; 
i : integer; 
const 
TestStr = '1st term;2nd term;3rd term'; 
begin 
  Terms:=TStringList.Create; 
  SeparateTerms(TestStr,';',Terms); 
  for i:=0 to terms.Count-1 do 
    ShowMessage(Terms.Strings[i]); 
  Terms.Free; 
end; 
///////////////////////////// 
根据一组字符分割字符串的函数 
type 
Charset = set of Char; 
var 
f : Text; 
s : String; 
procedure WriteStringSplitted(var s: String; Separators: Charset); 
var 
a,e : Integer;  {anfang und ende des w鰎tchens} 
begin 
a := 1; 
for e := 1 to Length(s) do 
  if s[e] in Separators then begin 
   WriteLn(Copy(s, a, e-a)); 
   a := e + 1; 
  end; 
  WriteLn(Copy(s, a, e-a+1)); 
end; 
begin 
Assign(f, 'c:/dingsbums/text.txt'); 
Reset(f); 
while not EOF(f) do begin 
  ReadLn(f,s); 
  WriteStringSplitted(s, [':', ',']); 
end; 
Close(f); 
end. 
////////////////////////////////////////////////// 
{===============================================================} 
{ 函数  : RESULTSTRING = HexToBin(HEXSTRING) 
{ 目的   : 把十六进制字符串转换为二进制字符串 
{ 
{===============================================================} 
{ 函数  : RESULTINTEGER = HexCharToInt(HEXCHAR) 
{ 目的   : 转换一个十六进制字符为整数 
{===============================================================} 
{ 函数  : RESULTSTRING = HexCharToBin(HEXCHAR) 
{ 目的   : 转换一个十六进制字符为二进制字符串 
{===============================================================} 
{ 函数  : RESULTINTEGER = Pow(BASE,POWER) 
{ 目的   : 指数函数 
{===============================================================} 
{ 函数  : RESULTINTEGER = BinStrToInt(BINSTRING) 
{ 目的   : 把二进制字符串转换为整数 
{===============================================================} 
{ 函数  : RESULTSTRING = DecodeSMS7Bit (PDUSTRING) 
{ 目的   : 解码一个7-bit SMS (GSM 03.38) 为ASCII码 
{===============================================================} 
{ 函数  :  RESULTSTRING = ReverseStr (SOURCESTRING) 
{ 目的   : 反转一个字符串 
{===============================================================} 
unit BinHexTools; 
interface 
function HexToBin(HexNr : string): string; 
function HexCharToInt(HexToken : char):Integer; 
function HexCharToBin(HexToken : char): string; 
function pow(base, power: integer): integer; 
function BinStrToInt(BinStr : string) : integer; 
function DecodeSMS7Bit(PDU : string):string; 
function ReverseStr(SourceStr : string) : string; 
implementation 
uses sysutils, dialogs; 
function HexCharToInt(HexToken : char):Integer; 
begin 
  {if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32); 
  { use lowercase aswell } 
  Result:=0; 
  if (HexToken>#47) and (HexToken<#58) then       { chars 0....9 } 
     Result:=Ord(HexToken)-48 
  else if (HexToken>#64) and (HexToken<#71) then  { chars A....F } 
     Result:=Ord(HexToken)-65 + 10; 
end; 
function HexCharToBin(HexToken : char): string; 
var DivLeft : integer; 
begin 
    DivLeft:=HexCharToInt(HexToken);   { first HEX->BIN } 
    Result:=''; 
                                       { Use reverse dividing } 
    repeat                             { Trick; divide by 2 } 
      if odd(DivLeft) then             { result = odd ? then bit = 1 } 
        Result:='1'+Result             { result = even ? then bit = 0 } 
      else 
        Result:='0'+Result; 
      DivLeft:=DivLeft div 2;       { keep dividing till 0 left and length = 4 } 
    until (DivLeft=0) and (length(Result)=4);      { 1 token = nibble = 4 bits } 
end; 
function HexToBin(HexNr : string): string; 
{ only stringsize is limit of binnr } 
var Counter : integer; 
begin 
  Result:=''; 
  for Counter:=1 to length(HexNr) do 
    Result:=Result+HexCharToBin(HexNr[Counter]); 
end; 
function pow(base, power: integer): integer; 
var counter : integer; 
begin 
  Result:=1; 
  for counter:=1 to power do 
    Result:=Result*base; 
end; 
function BinStrToInt(BinStr : string) : integer; 
var counter : integer; 
begin 
  if length(BinStr)>16 then 
    raise ERangeError.Create(#13+BinStr+#13+ 
            'is not within the valid range of a 16 bit binary.'+#13); 
  Result:=0; 
  for counter:=1 to length(BinStr) do 
      if BinStr[Counter]='1' then 
        Result:=Result+pow(2,length(BinStr)-counter); 
end; 
function DecodeSMS7Bit(PDU : string):string; 
var OctetStr : string; 
    OctetBin : string; 
    Charbin  : string; 
    PrevOctet: string; 
    Counter  : integer; 
    Counter2 : integer; 
begin 
  PrevOctet:=''; 
  Result:=''; 
  for Counter:=1 to length(PDU) do 
    begin 
      if length(PrevOctet)>=7 then     { if 7 Bit overflow on previous } 
        begin 
          if BinStrToInt(PrevOctet)<>0 then 
            Result:=Result+Chr(BinStrToInt(PrevOctet)) 
          else Result:=Result+' '; 
          PrevOctet:=''; 
        end; 
      if Odd(Counter) then            { only take two nibbles at a time } 
        begin 
          OctetStr:=Copy(PDU,Counter,2); 
          OctetBin:=HexToBin(OctetStr); 
          Charbin:=''; 
          for Counter2:=1 to length(PrevOctet) do 
            Charbin:=Charbin+PrevOctet[Counter2]; 
          for Counter2:=1 to 7-length(PrevOctet) do 
            Charbin:=OctetBin[8-Counter2+1]+Charbin; 
          if BinStrToInt(Charbin)<>0 then Result:=Result+Chr(BinStrToInt(CharBin)) 
            else Result:=Result+' '; 
          PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1); 
        end; 
    end; 
end; 
function ReverseStr(SourceStr : string) : string; 
var Counter : integer; 
begin 
  Result:=''; 
  for Counter:=1 to length(SourceStr) do 
    Result:=SourceStr[Counter]+Result; 
end; 
end.  

转发于:https://blog.csdn.net/mrwlw/article/details/78238434


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLAB中subplot的用法发布时间:2022-07-18
下一篇:
Delphi Treeview中显示Mainmenu菜单发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap