【问题标题】:removing leading zeros from delphi string从delphi字符串中删除前导零
【发布时间】:2011-05-02 12:08:19
【问题描述】:

德尔福 7

如何删除 delphi 字符串中的前导零?

例子:

00000004357816

function removeLeadingZeros(ValueStr: String): String
begin
 result:= 
end;

【问题讨论】:

    标签: delphi delphi-7


    【解决方案1】:

    从类似“000”的字符串中正确删除前导零的代码:

    function TrimLeadingZeros(const S: string): string;
    var
      I, L: Integer;
    begin
      L:= Length(S);
      I:= 1;
      while (I < L) and (S[I] = '0') do Inc(I);
      Result:= Copy(S, I);
    end;
    

    【讨论】:

    • 这就是我会做的。比大卫的回答更有效率。
    • 不错的解决方案。从实用性的角度来看,如果将修剪字符(在本例中为'0')作为参数传入会更有用,那么它可以修剪任何字符。
    • 我不确定这是否“比大卫的答案更有效率”,但它稍微优雅一些​​,最重要的是,它没有显示大卫代码中的错误。
    • +1 我不会太担心效率。做对更重要!就其价值而言,效率并没有真正的区别。
    【解决方案2】:
    function removeLeadingZeros(const Value: string): string;
    var
      i: Integer;
    begin
      for i := 1 to Length(Value) do
        if Value[i]<>'0' then
        begin
          Result := Copy(Value, i, MaxInt);
          exit;
        end;
      Result := '';
    end;
    

    根据您可能希望修剪空白的确切要求。因为问题中没有提到,所以我在这里没有这样做。

    更新

    我修复了 Serg 在此答案的原始版本中发现的错误。

    【讨论】:

    • 如果字符串中有零怎么办(开头不需要?例如:00000004307016
    • 没关系,代码只是按照您的要求删除了前导零。您的示例将从此代码返回“4307016”。
    • @Shane,我认为您应该再次阅读代码。它找到第一个非 0 字符并返回字符串的其余部分。
    • 我看了,没看懂。我发表了评论,然后我对其进行了测试。它错误了几次,因为缺少分号,并添加了一个额外的“结束”....但我想通了,让它编译并能够测试
    • 嗯... ShowMessage(removeLeadingZeros('000'));
    【解决方案3】:

    使用JEDI Code Library 执行此操作:

    uses JclStrings;
    
    var
      S: string;
    
    begin
      S := StrTrimCharLeft('00000004357816', '0');
    end.
    

    【讨论】:

    • 您可能应该提及(以防 OP 不知道)这需要 JEDI 代码库 (JCL),并提供链接。
    【解决方案4】:

    可能不是最快的,但它是单线 ;-)

    function RemoveLeadingZeros(const aValue: String): String;
    begin
      Result := IntToStr(StrToIntDef(aValue,0));
    end;
    

    当然,仅适用于整数范围内的数字。

    【讨论】:

    • 仅当字符串实际上是一个数字时。 IE。根本没有字母字符。
    【解决方案5】:

    在 2021 年寻找这个,我现在发现了一个更好的解决方案,即使用 TStringHelper 函数 TrimLeft,如下所示

    myString := myString.TrimLeft(['0']);
    

    有关文档http://docwiki.embarcadero.com/Libraries/Sydney/en/System.SysUtils.TStringHelper.TrimLeft的更多信息,请参见此处

    【讨论】:

      【解决方案6】:

      试试这个:

      function TFrmMain.removeLeadingZeros(const yyy: string): string;
      var
        xxx : string;
      begin
        xxx:=yyy;
         while LeftStr(xxx,1) = '0' do
          begin
            Delete(xxx,1,1);
          end;
          Result:=xxx;
      end;
      

      【讨论】:

        猜你喜欢
        • 2011-04-09
        • 2014-08-09
        • 1970-01-01
        • 2019-10-20
        • 2015-12-25
        • 2014-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多