【问题标题】:I am searching for a Perl-like split-function in Delphi我正在 Delphi 中寻找类似 Perl 的拆分函数
【发布时间】:2014-08-24 01:30:45
【问题描述】:

我知道有很多方法可以分割一个字符串,这样你就会得到一个字符串列表。 但我的问题是我想拆分字符串的 每个 字符。

这意味着以下字符串:

'That is my Example String'

应该转换为数组/字符串列表或其他任何形式:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
T h a t   i s   m y    E  x  a  m  p  l  e     S  t  r  i  n  g

在 Perl 或 Java 中,拆分函数的分隔符字段只是让空 例如:

Perl: @string=split("",$string);
Java: String[] myStringArray=myString.split("");

Delphi 管理此问题的最佳方法是什么?

【问题讨论】:

    标签: delphi split


    【解决方案1】:

    在Delphi中通常不需要这样的函数,因为Delphi字符串表现为char数组,每个元素都可以通过索引访问,并且char与字符串的赋值兼容。因此,您几乎可以在所有情况下使用 s[i] 而不是 splited[i]。

    如果您确实需要特殊功能来填充列表,它可能看起来像

    procedure SplitStringEx(const s: string; Splitted: TStrings);
    var
      i: Integer;
    begin
      Splitted.Clear;
      for i := 1 to Length(s) do
         {possible variant for fresh Delph versions 
         to take zero-based strings into account:}
      //for i := Low(s) to High(s) do  
        Splitted.Add(s[i])
    end;
    
    usage
      SplitStringEx('abc', Memo1.Lines);
    

    【讨论】:

    • 只注意第一个字符在索引 1 处。Low(s) 甚至不会在 D5 中编译(未在更高版本中测试)。更好地使用1..Lenth(s)Splitted.BeginUpdate/EndUpdate 也是个好主意。
    • @kobik 我写了Low 是因为可以在新的 Delphi 版本中使用从零开始的计数。但是你说得对,基于 1 的方法对于没有经验的用户来说会更好。
    • 好的,我正在添加this as a reference
    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 2023-03-11
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多