用户登录
用户注册

分享至

Delphi中常用字符串处理函数

  • 作者: AJ49945097
  • 来源: 51数据库
  • 2021-06-23
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:='01231142211 :655767';//需要把:替换成----
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=utf-8 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.  

转发于:

软件
前端设计
程序设计
Java相关