首页 > 其他分享 >delphi 中 StringHelper 详解,字符串常见操作

delphi 中 StringHelper 详解,字符串常见操作

时间:2024-03-11 16:15:13浏览次数:17  
标签:function const string delphi StringHelper 详解 str Integer str1

大小写转换

function ToLower: string;
function ToLower(LocaleID: TLocaleID): string;
function ToLowerInvariant: string;
function ToUpper: string;
function ToUpper(LocaleID: TLocaleID): string;
function ToUpperInvariant: string;

class function LowerCase(const S: string): string;
class function LowerCase(const S: string; LocaleOptions: TLocaleOptions): string;
class function UpperCase(const S: string): string;
class function UpperCase(const S: string; LocaleOptions: TLocaleOptions): string;
//--------------------------------------------------------------------------------
var
  str: string;
begin
  str := 'Delphi';
  str := str.ToLower; // delphi
  str := str.ToUpper; // DELPHI
end;

清除两边空格或指定字符

function Trim: string;
function TrimLeft: string;
function TrimRight: string;
function Trim(const TrimChars: array of Char): string;
function TrimLeft(const TrimChars: array of Char): string;
function TrimRight(const TrimChars: array of Char): string;
//--------------------------------------------------------------------------------
var
  str1, str2: string;
begin
  str1 := '   Delphi 10000   ';

  str2 := str1.TrimLeft;  // 'Delphi 10000   '
  str2 := str1.TrimRight; // '   Delphi 10000'
  str2 := str1.Trim;      // 'Delphi 10000'

  str2 := str1.Trim([' ', '0']); // 'Delphi 1'
end;

字符串对比

function CompareTo(const strB: string): Integer;

class function Compare(const StrA: string; const StrB: string): Integer;
class function CompareText(const StrA: string; const StrB: string): Integer;
class function Compare(const StrA: string; const StrB: string; LocaleID: TLocaleID): Integer;
class function Compare(const StrA: string; const StrB: string; IgnoreCase: Boolean): Integer;
class function Compare(const StrA: string; const StrB: string; IgnoreCase: Boolean; LocaleID: TLocaleID): Integer;
class function Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer): Integer;
class function Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer; LocaleID: TLocaleID): Integer;
class function Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer; IgnoreCase: Boolean): Integer;
class function Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer; IgnoreCase: Boolean; LocaleID: TLocaleID): Integer;
class function CompareOrdinal(const StrA: string; const StrB: string): Integer;
class function CompareOrdinal(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer): Integer;
//--------------------------------------------------------------------------------
var
  str1, str2: string;
  n: Integer;
begin
  str1 := 'ABC 123';
  str2 := 'abc 123';

  n := str1.CompareTo(str2);              // -32

  n := str1.Compare(str1, str2);          // 1
  n := str1.CompareText(str1, str2);      // 0; 相同

  n := str1.Compare(str1, str2, True);    // 0; 不区分大小写
  n := str1.CompareOrdinal(str1, str2);   // -32

  n := str1.Compare(str1, 4, str2, 4, 3); // 0; 只对比后三位
end;

搜索字符串

function IndexOf(value: Char): Integer;
function IndexOf(const Value: string): Integer;
function IndexOf(Value: Char; StartIndex: Integer): Integer;
function IndexOf(const Value: string; StartIndex: Integer): Integer;
function IndexOf(Value: Char; StartIndex: Integer; Count: Integer): Integer;
function IndexOf(const Value: string; StartIndex: Integer; Count: Integer): Integer;
function IndexOfAny(const AnyOf: array of Char): Integer;
function IndexOfAny(const AnyOf: array of Char; StartIndex: Integer): Integer;
function IndexOfAny(const AnyOf: array of Char; StartIndex: Integer; Count: Integer): Integer;

function LastIndexOf(Value: Char): Integer;
function LastIndexOf(const Value: string): Integer;
function LastIndexOf(Value: Char; StartIndex: Integer): Integer;
function LastIndexOf(const Value: string; StartIndex: Integer): Integer;
function LastIndexOf(Value: Char; StartIndex: Integer; Count: Integer): Integer;
function LastIndexOf(const Value: string; StartIndex: Integer; Count: Integer): Integer;
function LastIndexOfAny(const AnyOf: array of Char): Integer;
function LastIndexOfAny(const AnyOf: array of Char; StartIndex: Integer): Integer;
function LastIndexOfAny(const AnyOf: array of Char; StartIndex: Integer; Count: Integer): Integer;
//--------------------------------------------------------------------------------
var
  str: string;
  n: Integer;
begin
  str := 'A1 A2 A3 A4';

  n := str.IndexOf('A');     // 0
  n := str.LastIndexOf('A'); // 9
  n := str.IndexOf('B');     // -1; 没找到

  n := str.IndexOf('A', 1, str.Length - 1);                  // 3
  n := str.LastIndexOf('A', str.Length - 1, str.Length - 1); // 9

  n := str.IndexOfAny(['1', '2', '3', '4']);     // 1
  n := str.LastIndexOfAny(['1', '2', '3', '4']); // 10
end;

是否包含

function Contains(const Value: string): Boolean;

function StartsWith(const Value: string): Boolean;
function StartsWith(const Value: string; IgnoreCase: Boolean): Boolean;

function EndsWith(const Value: string): Boolean;
function EndsWith(const Value: string; IgnoreCase: Boolean): Boolean;

class function EndsText(const ASubText, AText: string): Boolean;
//--------------------------------------------------------------------------------
var
  str: string;
  b: Boolean;
begin
  str := 'Delphi XE4';

  b := str.Contains('XE'); // True
  b := str.Contains('xe'); // False

  b := str.StartsWith('delphi');       // False
  b := str.StartsWith('delphi', True); // True

  b := str.EndsWith('XE4');            // True

  b := str.EndsText('xe4', str);       // True
end;

添加或解除引号

function QuotedString: string;
function QuotedString(const QuoteChar: Char): string;

function DeQuotedString: string;
function DeQuotedString(const QuoteChar: Char): string;
//--------------------------------------------------------------------------------
var
  str1, str2: string;
begin
  str1 := 'Delphi';

  str2 := str1.QuotedString;        // 'Delphi'
  str2 := str1.QuotedString('"');   // "Delphi"

  str1 := '"Delphi"';
  str2 := str1.DeQuotedString('"'); // Delphi
end;

适宽处理

function PadLeft(TotalWidth: Integer): string;
function PadLeft(TotalWidth: Integer; PaddingChar: Char): string;
function PadRight(TotalWidth: Integer): string;
function PadRight(TotalWidth: Integer; PaddingChar: Char): string;
//--------------------------------------------------------------------------------
var
  str: string;
begin
  str := '1';
  str := str.PadLeft(4, '0'); // 0001
end;

插入与删除(startIndex是从0开始)

function Insert(StartIndex: Integer; const Value: string): string;

function Remove(StartIndex: Integer): string;
function Remove(StartIndex: Integer; Count: Integer): string;
//--------------------------------------------------------------------------------
var
  str1, str2: string;
begin
  str1 := 'Delphi 4';
  str2 := str1.Insert(7, 'XE'); // Delphi XE4
 
  str1 := 'Delphi XE4';
  str2 := str1.Remove(6);    // Delphi
  str2 := str1.Remove(7, 2); // Delphi 4
end;

str[index] 这个index是从1开始的,而Insert、Remove、SubString都是从0开始的,切记,看下面的截取说明!!!!

截取(startIndex是从0开始)

function Substring(StartIndex: Integer): string;
function Substring(StartIndex: Integer; Length: Integer): string;
//--------------------------------------------------------------------------------
var
  str1, str2: string;
begin
  str1 := 'Delphi XE4';
  str2 := str1.Substring(7);    // XE4
  str2 := str1.Substring(7, 2); // XE
end;
//--------------------------------------------------------------------------------
procedure TForm3.btn1Click(Sender: TObject);
var
  s: string;
begin
  s := '123456';
  mmo1.Lines.Add(s[1]); //1,下标从1开始
  mmo1.Lines.Add(s.Substring(1, 1)); //2,下标从0开始

end;

//这也是一个常见用法
procedure TForm12.btn1Click(Sender: TObject);
var
  wokao: string;
begin
  wokao := 'abcde_fg';
  ShowMessage(IntToStr(wokao.IndexOf('_')));//5
  ShowMessage(wokao.Substring(0,wokao.IndexOf('_')));//abcde
end;

//==========================  最常用的用法,根据ps来截取  ========================

procedure TForm2.btn1Click(Sender: TObject);
begin

  var json := '12345';
  var ps := 1;
  var startPs := ps;
  repeat
    Inc(ps);
  until json[ps] = '5';

  var content := json.Substring(startPs - 1, ps - startPs); // 1234

  //json.Substring(startPs - 1 : Substring是索引从0开始的,故而减去1

  //ps - startPs 表示差值,拷贝几个字符,从第一个字符开始,不包含最后一个5;即:1 - 4
  
  // ps - startPs 的意思是,从第一个字符 ---> 当前光标前的一个字符;当前光标在5,所以是 1 - 4;

end;

上面截取的用法,最常用,要记着 2 要素,startPs - 1 和 ps - startPs ;以后就这样用就可以了,不用每次都推导;

替换

function Replace(OldChar: Char; NewChar: Char): string;
function Replace(OldChar: Char; NewChar: Char; ReplaceFlags: TReplaceFlags): string;
function Replace(const OldValue: string; const NewValue: string): string;
function Replace(const OldValue: string; const NewValue: string; ReplaceFlags: TReplaceFlags): string;
//--------------------------------------------------------------------------------
var
  str1, str2: string;
begin
  str1 := 'ABC ABC ABC';
  str2 := str1.Replace('A', '*');                 // *BC *BC *BC
  str2 := str1.Replace('A', '*', [rfIgnoreCase]); // *BC ABC ABC
end;

分割

function Split(const Separator: array of Char): TArray<string>;
function Split(const Separator: array of Char; Count: Integer): TArray<string>;
function Split(const Separator: array of Char; Options: TStringSplitOptions): TArray<string>;
function Split(const Separator: array of string; Options: TStringSplitOptions): TArray<string>;
function Split(const Separator: array of Char; Count: Integer; Options: TStringSplitOptions): TArray<string>;
function Split(const Separator: array of string; Count: Integer; Options: TStringSplitOptions): TArray<string>;
//--------------------------------------------------------------------------------
var
  str: string;
  arr: TArray<string>;
begin
  str := 'A-1,B-2,,,C-3,D-4';

  arr := str.Split([',']);                                   // arr[0] = A-1; Length(arr) = 6
  arr := str.Split([','], TStringSplitOptions.ExcludeEmpty); // 忽略空项; Length(arr) = 4
  arr := str.Split([','], 2);                                // 只提取前 2

  arr := str.Split([',', '-'], ExcludeEmpty); //arr[0] = A; Length(arr) = 8

  arr := str.Split([',,,'], None);            // 分隔符可以是一个字符串数组
end;

//--------------------------------------------------------------------------------
procedure TForm2.btn1Click(Sender: TObject);
var
  str1, str2, str3: string;
  s: string;
begin
  mmo1.Lines.Clear;
  str1 := '';  //空被分隔后,一定是空数组
  for s in str1.Split([',']) do
  begin
    mmo1.Lines.Add(s); //这里不会有任何输出
  end;

  str2 := 'a'; //一个元素被分隔的话,会分隔出来一个元素
  for s in str2.Split([',']) do
  begin
    mmo1.Lines.Add(s); //a
  end;

  str3 := ','; //会被分隔成左右两个空元素
  var flag := 0;
  for s in str3.Split([',']) do
  begin
    mmo1.Lines.Add(flag.ToString + s);
    Inc(flag);
  end;
end;
//输出:
a
0
1

连接

class function Join(const Separator: string; const values: array of const): string;
class function Join(const Separator: string; const Values: array of string): string;
class function Join(const Separator: string; const Values: IEnumerator<string>): string;
class function Join(const Separator: string; const Values: IEnumerable<string>): string;
class function Join(const Separator: string; const value: array of string; StartIndex: Integer; Count: Integer): string;
//--------------------------------------------------------------------------------
var
  S: string;
  str: string;
  strArr: TArray<string>;
begin
  str := 'A1,B2,C3,,,,D4,E5,F6,G7';
  strArr := str.Split([','], ExcludeEmpty);

  str := S.Join('-', strArr);             // A1-B2-C3-D4-E5-F6-G7

  str := S.Join('; ', [1,2,3,4,5]);       // 1; 2; 3; 4; 5

  str := S.Join(',', ['abc', 123, true]); // abc,123,True
end;

类型转换

function ToBoolean: Boolean;
function ToInteger: Integer;
function ToSingle: Single;
function ToDouble: Double;
function ToExtended: Extended;

class function ToBoolean(const S: string): Boolean;
class function ToInteger(const S: string): Integer;
class function ToSingle(const S: string): Single;
class function ToDouble(const S: string): Double;
class function ToExtended(const S: string): Extended;

class function Parse(const Value: Integer): string;
class function Parse(const Value: Int64): string;
class function Parse(const Value: Boolean): string;
class function Parse(const Value: Extended): string;
//--------------------------------------------------------------------------------
var
  S: string;
  str: string;
  n: Integer;
  b: Boolean;
  f: Double;
begin
  str := S.Parse(123);
  n := str.ToInteger;  // 123
  b := str.ToBoolean;  // True

  str := S.Parse(True);
  b := str.ToBoolean;  // True
  n := str.ToInteger;  // -1

  str := S.Parse(3.14159260000);
  f := str.ToDouble;  //3.1415926
end;

定界符

function IsDelimiter(const Delimiters: string; Index: Integer): Boolean;
function LastDelimiter(const Delims: string): Integer;
//--------------------------------------------------------------------------------
var
  str: string;
  b: Boolean;
  n: Integer;
begin
  str := 'http://del.cnblogs.com';

  b := str.IsDelimiter(':', 4);  // True
  b := str.IsDelimiter('//', 5); // True

  n := str.LastDelimiter('.');   // 18
  n := str.IndexOf('.');         // 10
end;

空字符串

const Empty = '';

function IsEmpty: Boolean;

class function IsNullOrEmpty(const Value: string): Boolean;
class function IsNullOrWhiteSpace(const Value: string): Boolean;
//--------------------------------------------------------------------------------
var
  S: string;
  str: string;
  b: Boolean;
begin
  str := '       ';

  b := str.IsEmpty;               // False
  b := S.IsNullOrWhiteSpace(str); // True
end;

String 与 Char

class function Create(C: Char; Count: Integer): string;
class function Create(const Value: array of Char; StartIndex: Integer; Length: Integer): string;
class function Create(const Value: array of Char): string;

property Chars[Index: Integer]: Char read GetChars;
property Length: Integer read GetLength;

function CountChar(const C: Char): Integer;

function ToCharArray: TArray<Char>;
function ToCharArray(StartIndex: Integer; Length: Integer): TArray<Char>;

procedure CopyTo(SourceIndex: Integer; var destination: array of Char; DestinationIndex: Integer; Count: Integer);
//--------------------------------------------------------------------------------
var
  S: string;
  str, str2: string;
  charArr: TCharArray;
  n: Integer;
  c: Char;
begin
  str := 'ABC';
  n := str.Length;   // 3
  c := str.Chars[0]; // A = str[1]

  str := S.Create('A', 7); // AAAAAAA

  charArr := 'ABCDEFG'.ToCharArray;
  str := s.Create(charArr);       // ABCDEFG
  str := S.Create(charArr, 1, 3); // BCD

  charArr := '1234567890'.ToCharArray;
  str := 'ABCDEFG';
  str.CopyTo(1, charArr, 2, 3);
  str := S.Create(charArr);       // 12BCD67890
end;

其他

function Equals(const Value: string): Boolean;
function GetHashCode: Integer;

class function Equals(const a: string; const b: string): Boolean;
class function Format(const Format: string; const args: array of const): string;
class function Copy(const Str: string): string;

标签:function,const,string,delphi,StringHelper,详解,str,Integer,str1
From: https://www.cnblogs.com/del88/p/18066347

相关文章

  • Vue — v-model详解
    一、v-model原理原理:v-model本质上是一个语法糖。例如在inpu中,就是value属性和input事件的合写作用:提供数据的双向绑定双向绑定:数据变,视图跟着变;视图变,数据跟着变二、表单类组件封装&v-model简化代码1.表单组件封装的核心思路:(1)父传子:数据从父组件使用prop传递给子组件渲染......
  • 选主板必须要懂芯片组:一文详解芯片组
    游戏玩家都知道主板的芯片组决定了主板能够兼容哪种CPU,但是芯片组到底说的是什么,可能很多萌新还是摸不着头脑,下面咱们就来聊一聊主板的芯片组。芯片组(Chipset)是主板的核心组成部分,作用是协调CPU、内存、硬盘等各种硬件之间的交流与合作,是CPU与周边设备沟通的桥梁。芯片组是由一......
  • Unity3D中刚体、碰撞组件、物理组件的区别详解
    Unity3D提供了丰富的功能和组件,其中包括刚体、碰撞组件和物理组件。这些组件在游戏开发中起着非常重要的作用,能够让游戏世界更加真实和有趣。本文将详细介绍这三种组件的区别以及如何在Unity3D中实现它们。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也......
  • Unity3D Shader事项法线贴图功能详解
    Unity3D它提供了丰富的功能和工具,使开发人员能够轻松创建出色的游戏和应用程序。其中Shader是Unity3D中非常重要的一部分,它可以帮助开发人员实现各种视觉效果,包括法线贴图功能。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技......
  • GaussDB(DWS)集群通信:详解pooler连接池
    本文分享自华为云社区《GaussDB(DWS)集群通信系列一:pooler连接池》,作者:半岛里有个小铁盒。1.前言适用版本:【8.1.0(及以上)】GaussDB(DWS)为MPP型分布式数据库,使用ShareNothing架构,数据分散存储在各个DN节点,而CN不存储数据,作为接收查询的入口,生成的计划会尽量下推到DN并行执......
  • weback5基础配置详解
    <divid="content_views"class="markdown_viewsprism-tomorrow-night"><svgxmlns="http://www.w3.org/2000/svg"style="display:none;"><pathstroke-lineca......
  • 多线程系列(十六) -常用并发原子类详解
    一、简介在Java的java.util.concurrent包中,除了提供底层锁、并发同步等工具类以外,还提供了一组原子操作类,大多以Atomic开头,他们位于java.util.concurrent.atomic包下。所谓原子类操作,顾名思义,就是这个操作要么全部执行成功,要么全部执行失败,是保证并发编程安全的重要一环。相......
  • 接口的详解 :接口 对象=new 实现类
    首先接口是一个特殊的抽象类既然是类就会创建对象 接口是为了实现多态接口是为了实现多态。接口是为了实现多态。接口回调:interfacePeople{voidpeopleList();}classStudentimplementsPeople{publicvoidpeopleList(){System.out.println("I’m......
  • Session详解
    一、什么是sessionsession在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。二、session有什么用我们先来想一个问题,这个问题就是我们在游览购物网站时,我们并没有登录,但是我们任然可以......
  • 深度学习-卷积神经网络-目标检测YOLO-v1详解-54
    目录1.结构3.总结3.训练样本的构造4.损失函数5.训练6.推理6.小结参考:https://www.zhihu.com/tardis/zm/art/46691043?source_id=1005输入一张图片,要求输出其中所包含的对象,以及每个对象的位置(包含该对象的矩形框)RCNN开创性的提出了候选区(RegionProposals)的方法,先从......