string - 如何删除Delphi字母串中的数字

标签 string delphi delphi-7

我有一个字符串,我设置了选择字母的坐标,但有时它们会混淆,我询问坐标与数字,例如 '105DYUDXB28DYU13'完成了吗'DYUDXBDYU'

tmpT.Put:=Trim(MidStr(S,8,6))+Trim(MidStr(S,37,3));

enter image description here

最佳答案

性能良好的解决方案如下(使用Character):

function RemoveNumbers(const AString: string): string;
var
  i, j: integer;
begin
  SetLength(result, AString.Length);
  j := 0;
  for i := 1 to AString.Length do
    if not AString[i].IsDigit then
    begin
      inc(j);
      result[j] := AString[i];
    end;
  SetLength(result, j);
end;

该函数使用了 Delphi 7 之后引入的一些语言和库功能。要使其在 Delphi 7 中工作,您需要稍微重写它:

function RemoveNumbers(const AString: string): string;
var
  i, j: integer;
begin
  SetLength(result, Length(AString));
  j := 0;
  for i := 1 to Length(AString) do
    if not (AString[i] in ['0'..'9']) then
    begin
      inc(j);
      result[j] := AString[i];
    end;
  SetLength(result, j);
end;

小字: TCharHelper.IsDigit 是 Unicode 感知的,因此它将针对所有 Unicode 数字返回 true。例如,它将返回 true for

  • ٣(U+0663:阿拉伯-印度数字三),
  • ੪(U+0A6A:GURMUKHI 数字四),
  • ௫(U+0BEB:泰米尔语数字五),
  • ៥(U+17E5:高棉数字五),以及
  • ᠗(U+1817:蒙古语数字七)。

如果您只想将字符 '0'..'9' 视为数字,则可以使用现代版本的 Delphi 7 测试:

if not CharInSet(AString[i], ['0'..'9']) then

关于string - 如何删除Delphi字母串中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50168002/

相关文章:

delphi - Delphi XE2 中的 EXE 大小太大

delphi - 释放变量VarArray

delphi - 如何制作一个自定义组件来检测表单上是否有新组件

java - 删除第一个空格后的每个字符串的内容

python - 字符串列表到整数元组

c++ - 构建实际上是十六进制数的字符串变量

delphi - 将 Delphi 7 属性编辑器转换为 Delphi XE2

Delphi标签和asm怪异?

delphi - 计算渐变颜色的最快方法?

c++ - 如何交换函数中作为指针传递的 2 个字符串?