当前位置:  开发笔记 > 编程语言 > 正文

在Delphi7中从字符串中剥离非字母数字字符的最快方法是什么?

如何解决《在Delphi7中从字符串中剥离非字母数字字符的最快方法是什么?》经验,为你挑选了2个好方法。

允许的字符是A到Z,a到z,0到9.最少量的代码或单个函数最好,因为系统对响应输入的时间要求很高.



1> mghie..:

如果我理解正确,你可以使用这样的函数:

function StripNonAlphaNumeric(const AValue: string): string;
var
  SrcPtr, DestPtr: PChar;
begin
  SrcPtr := PChar(AValue);
  SetLength(Result, Length(AValue));
  DestPtr := PChar(Result);
  while SrcPtr <> #0 do begin
    if SrcPtr[0] in ['a'..'z', 'A'..'Z', '0'..'9'] then begin
      DestPtr[0] := SrcPtr[0];
      Inc(DestPtr);
    end;
    Inc(SrcPtr);
  end;
  SetLength(Result, DestPtr - PChar(Result));
end;

这将使用PChar获得最高速度(以较低的可读性为代价).

编辑:通过gabr关于使用DestPtr [0]而不是DestPtr ^注释:这应该编译为相同的字节,但是在类似的代码中有很好的应用程序,你需要向前看.假设您想要替换换行符,那么您可以执行类似的操作

function ReplaceNewlines(const AValue: string): string;
var
  SrcPtr, DestPtr: PChar;
begin
  SrcPtr := PChar(AValue);
  SetLength(Result, Length(AValue));
  DestPtr := PChar(Result);
  while SrcPtr <> #0 do begin
    if (SrcPtr[0] = #13) and (SrcPtr[1] = #10) then begin
      DestPtr[0] := '\';
      DestPtr[1] := 't';
      Inc(SrcPtr);
      Inc(DestPtr);
    end else
      DestPtr[0] := SrcPtr[0];
    Inc(SrcPtr);
    Inc(DestPtr);
  end;
  SetLength(Result, DestPtr - PChar(Result));
end;

因此我通常不使用^.

顺便说一下,有没有人知道如何以突出显示正常工作的方式格式化?



2> 小智..:
uses JclStrings;

  S := StrKeepChars('mystring', ['A'..'Z', 'a'..'z', '0'..'9']);


注意:在最新的JCL库中,您会说:`使用JclAnsiStrings`
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有