Delphi 字符串拆分/分割[2] - Classes.ExtractStrings

Delphi 字符串拆分/分割[2] - Classes.ExtractStrings

原型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar;
  Strings: TStrings): Integer;
var
  Head, Tail: PChar;
  EOS, InQuote: Boolean;
  QuoteChar: Char;
  Item: string;
begin
  Result := 0;
  if (Content = nil) or (Content^=#0) or (Strings = nil) then Exit;
  Tail := Content;
  InQuote := False;
  QuoteChar := #0;
  Strings.BeginUpdate;
  try
    repeat
      while Tail^ in WhiteSpace + [#13, #10] do Tail := StrNextChar(Tail);
      Head := Tail;
      while True do
      begin
        while (InQuote and not (Tail^ in [QuoteChar, #0])) or
          not (Tail^ in Separators + [#0, #13, #10, '''', '"']) do Tail := StrNextChar(Tail);
        if Tail^ in ['''', '"'] then
        begin
          if (QuoteChar <> #0) and (QuoteChar = Tail^) then
            QuoteChar := #0
          else if QuoteChar = #0 then
            QuoteChar := Tail^;
          InQuote := QuoteChar <> #0;
          Tail := StrNextChar(Tail);
        end else Break;
      end;
      EOS := Tail^ = #0;
      if (Head <> Tail) and (Head^ <> #0) then
      begin
        if Strings <> nil then
        begin
          SetString(Item, Head, Tail - Head);
          Strings.Add(Item);
        end;
        Inc(Result);
      end;
      Tail := StrNextChar(Tail);
    until EOS;
  finally
    Strings.EndUpdate;
  end;
end;

参数:

  • Separators  //分隔符,可以是多个,例如 [';',',',':'] 可以按分号、逗号、分号来同时分割。
  • WhiteSpace //开头被忽略字符,例如['<','>',' '],被分割出的字符,如果开头有大于号,小于号,或者分号,被分割出来后会被忽略。
  • Content   //被分割的字符串。
  • Strings   //返回字符串

返回值:

  分割出的字符串数量。

 

用法示例:

1
2
3
4
5
6
7
8
9
10
var
    S:   string;
    SL:   TStringList;
begin
    S := '222,777,888 ';
    SL := TStringList.Create;
    ExtractStrings([','],[],PChar(S),SL);
    ShowMessage(SL.Text);
    SL.Free;
end;
1
2
3
4
5
6
7
8
9
10
var
  s: String;
  List: TStringList;
begin
  s := 'delphi: #你好; #pascal, 程序';
  List := TStringList.Create;
  ExtractStrings([';',',',':'],['#',' '],PChar(s),List);  //第一个参数是分隔符; 第二个参数是开头被忽略的字符
  ShowMessage(List.Text); 
  List.Free;
end;

  

  

 

创建时间:2021.01.07  更新时间:

 

posted on   滔Roy  阅读(562)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
历史上的今天:
2020-01-07 SQL 数据库 关于数量为空取零的区别
2020-01-07 Delphi SQL报错 SQL statement doesn't return rows

导航

点击右上角即可分享
微信分享提示