截取字符串-----------------------如何从右边开始向左边取指定字符为止?

WeiMuBiaoCunZai 2016-03-21 10:48:39

是这样的,我想从右边开始向左边取字符,以指定字符为结束..

比如:
AC12(021ADE

我想从右边向左,到(为止,把021ADE取出

用函数如何实现呢?有没示例代码可行?
...全文
2727 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjpweb 2016-03-24
  • 打赏
  • 举报
回复
uses StrUtils;

 RightStr(str1,5);
doloopcn 2016-03-23
  • 打赏
  • 举报
回复
其实字符串只不过是个数组,什么左啊右啊,都可以用循环实现的,不用POS,不用COPY都可以实现楼主的功能的。 Result:=''; for i:=Length(aStr)-1 downto 0 do if aStr[i]='(' then begin for j:=i+1 to Length(aStr)-1 do Result:=Result+aStr[j]; break; end; 另外,如果是用XE的不建议强制换成ANSI,这样经常出乱码
hongss 2016-03-22
  • 打赏
  • 举报
回复
Delphi版好热闹啊
lyhoo163 2016-03-22
  • 打赏
  • 举报
回复
function GetStr(SS,S:String):string;
var i:integer;
begin
  GetStr:='';
  For i:=Length(SS) downto 1 do
  begin
    if SS[i]=S then
    begin
      GetStr:=Copy(SS,i+1,Length(SS)-i);
      exit;
    end;
  end;
end;
加一句exit,更完善。
lyhoo163 2016-03-22
  • 打赏
  • 举报
回复
function GetStr(SS,S:String):string;
var i:integer;
begin
  GetStr:='';
  For i:=Length(SS) downto 1 do
  begin
    if SS[i]=S then
    begin
      GetStr:=Copy(SS,i+1,Length(SS)-i);
      ecit;
    end;
  end;
end;
加一句exit,更完善。
oushengfen 2016-03-22
  • 打赏
  • 举报
回复
这办法太多了吧,呵呵
doloopcn 2016-03-21
  • 打赏
  • 举报
回复
这是POS和COPY组合的简单形式 i:=pos(',',astr); if i>0 then result:=copy(astr,i+1,length(astr)-i) else result:='';
Mr Dang 2016-03-21
  • 打赏
  • 举报
回复
1楼的就可以,可以更加精简不要if判断,1楼多此一举
lyhoo163 2016-03-21
  • 打赏
  • 举报
回复


function GetStr(SS,S:String):string;
var i:integer;
begin
GetStr:='';
For i:=Length(SS) downto 1 do
begin
if SS[i]=S then
GetStr:=Copy(SS,i+1,Length(SS)-i);
end;
end;

函数参数: GetStr('母字符串','标识字符'):'返回获取字符'
lyhoo163 2016-03-21
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetStr(SS,S:String):string;
var i:integer;
    S1:string;
begin
  GetStr:='';
  For i:=Length(SS) downto 1 do
  begin
    if SS[i]=S then
      GetStr:=Copy(SS,i+1,Length(SS)-i);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit3.Text:=GetStr(Edit1.Text,Edit2.Text);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  edit1.Text:='AC12(021ADE';
  edit2.Text:='(';
  edit3.Text:='';
end;

end.
function GetStr(SS,S:String):string; 就是为你做的函数。仅供参考。
zbdzjx 2016-03-21
  • 打赏
  • 举报
回复
如果不存在中文,可以先用StrUtils.ReverseString将字符串反转,再找指定字符的位置,将找到位置前面的字符串拷贝出来,再反转回去。
Playmaster 2016-03-21
  • 打赏
  • 举报
回复
楼上的方法没考虑到可能有多个‘(’的情况。 正确算法如下 result:=''; idx:=length(astr); //要拷贝的子串的起始位置。 while (idx>0) and (astr[idx] <> '(') do dec(idx); result := copy(astr, idx+1, length(astr)-Idx); 如果源串不包含'('字符,则拷贝整个源串。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧