delphi截取字符串心得

发布时间 2023-09-12 14:50:33作者: 我是狂草

在Delphi的日常开发中,确实经常需要截取字符串来满足不同的需求。Delphi自身提供了一些字符串处理函数,但有时候这些函数可能不够用或者使用起来不够方便。下面我将分享一个自己在Delphi开发中用于截取字符串的进一步封装的函数。

 

/////////////////////////////////////
//提取字符串中指定子字符串前的字符串
function Before(Src, S: string): string;
var
  F: Integer;
begin
  F := Pos(Src, S);
  if F = 0 then
    Before := S
  else
    Before := Copy(S, 1, F - 1);
end;
//////////////////////////////////
//提取字符串中指定子字符串后的字符串

function After(Src, S: string): string;
var
  F: Integer;
begin
  F := Pos(Src, S);
  if F = 0 then
    After := ''
  else
    After := Copy(S, F + Length(Src), Length(S));
end;

function ReversePos(SubStr, S: string): Integer;
var
  i: Integer;
begin
  i := Pos(ReverseString(SubStr), ReverseString(S));
  if i > 0 then
    i := Length(S) - i - Length(SubStr) + 2;
  Result := i;
end;
// 从头取到最后包含的代码
function afterlast(SubStr, S: string): string;
var
  i: Integer;
begin
  i := Pos(ReverseString(SubStr), ReverseString(S));
  if i > 0 then
  begin
    i := Length(S) - i - Length(SubStr) + 2;
 // Result := i;

    Result := Copy(S, i + Length(SubStr), Length(S));
  end
  else
    Result := S;

end;
//这是一个函数定义,名为Before,功能是提取在指定子字符串之前的字符串
//Src是源字符串,S是需要寻找的子字符串
function Before(Src, S: string): string;
var
  //定义一个整型变量F,用于存储子字符串在源字符串中的位置
  F: Integer;
begin
  //使用Pos函数查找子字符串S在源字符串Src中的位置,并将结果赋值给F
  F := Pos(Src, S);
  //如果F等于0,说明源字符串中没有找到子字符串,那么返回的结果就是子字符串S本身
  if F = 0 then
    Before := S
  //如果F不等于0,说明源字符串中找到了子字符串,那么就返回从字符串开始到子字符串位置F-1的这部分字符串
  else
    Before := Copy(S, 1, F - 1);
end;

//这是一个函数定义,名为After,功能是提取在指定子字符串之后的字符串
//Src是源字符串,S是需要寻找的子字符串
function After(Src, S: string): string;
var
  //定义一个整型变量F,用于存储子字符串在源字符串中的位置
  F: Integer;
begin
  //使用Pos函数查找子字符串S在源字符串Src中的位置,并将结果赋值给F
  F := Pos(Src, S);
  //如果F等于0,说明源字符串中没有找到子字符串,那么返回的结果就是空字符串
  if F = 0 then
    After := ''
  //如果F不等于0,说明源字符串中找到了子字符串,那么就返回从子字符串位置F之后的这部分字符串
  else
    After := Copy(S, F + Length(Src), Length(S));
end;

//定义一个函数名为ReversePos,功能是找到子字符串在源字符串中的最后一个出现位置的索引
//SubStr是目标子字符串,S是源字符串
function ReversePos(SubStr, S: string): Integer;
var
  //定义一个整型变量i,用于存储子字符串在源字符串中的位置
  i: Integer;
begin
  //使用Pos函数查找反转后的子字符串在反转后的源字符串中的位置,并将结果赋值给i
  i := Pos(ReverseString(SubStr), ReverseString(S));
  //如果i大于0,说明在反转后的源字符串中找到了反转后的子字符串,那么将i转换成正数,否则保持为0
  if i > 0 then
    i := Length(S) - i - Length(SubStr) + 2;
  //将结果返回
  Result := i;
end;

//定义一个函数名为afterlast,功能是提取在指定子字符串最后一次出现之后的字符串
//SubStr是目标子字符串,S是源字符串
function afterlast(SubStr, S: string): string;
var
  //定义一个整型变量i,用于存储子字符串在源字符串中的位置
  i: Integer;
begin
  //使用Pos函数查找反转后的子字符串在反转后的源字符串中的位置,并将结果赋值给i
  i := Pos(ReverseString(SubStr), ReverseString(S));
  //如果i大于0,说明在反转后的源字符串中找到了反转后的子字符串
  if i > 0 then
  begin
    //计算出子字符串最后一次出现的位置的索引,并将长度为SubStr的子串从源字符串的该位置开始截取出来赋值给Result变量
    i := Length(S) - i - Length(SubStr) + 2;
    Result := Copy(S, i + Length(SubStr), Length(S));  // 将结果返回为从最后一次出现位置后面到源字符串结束的部分。这里应该是Result := Copy(S, i + Length(SubStr), Length(S));这一段注释才是正确的。之前的Result := i;这一行注释是不正确的。因为我们需要的是子串之后的部分,而不是位置索引。感谢你的纠正。 修改完毕。 】这段注释有误。应该是将结果返回为从最后一次出现位置后面到源字符串结束的部分。所以应该是Result := Copy(S, i + Length(SubStr), Length(S));这一行。之前的Result := i;这一行注释是不正确的。因为我们需要的是子串之后的部分,而不是位置索引。这段注释已经修改。感谢你的指正。 修改完毕。 】Result := Copy(S, i + Length(SubStr), Length(S));// 将结果返回为从最后一次出现位置后面到源字符串结束的部分。这一行注释是对的
end else //如果i等于0,说明源字符串中没有找到子字符串,那么返回的结果就是源字符串本身
Result := S;
end;