(delphi11最新学习资料) Object Pascal 学习笔记---第6章第3节(字符串辅助操作)

news/2024/4/15 7:43:26
6.3.4 字符串辅助操作

​ 鉴于字符串类型的重要性,我们不难理解,该类型的辅助函数有一个长长操作列表可以执行。鉴于字符串的重要性以及这些操作在大多数应用程序中的通用性,我认为仔细研究一下这个列表是值得的。

​ Delphi 传统的全局字符串操作函数和字符串辅助函数有一个重要区别:传统的字符串操作假定字符串索引从1开始,而字符串辅助操作逻辑是索引从0开始!

我已经对字符串辅助操作(大多数都有多个重载版本)进行了逻辑分组,考虑到它们的名称通常相当直观,仅简要描述它们的作用:
  • 拷贝或部分拷贝操作,如Copy、CopyTo、Join和SubString
  • 字符串修改操作,如Insert、Remove和Replace
  • 对于从各种数据类型转换为字符串,您可以使用Parse和Format
  • 当可能的情况下,使用ToBoolean、ToInteger、ToSingle、ToDouble和ToExtended进行从字符串到各种数据类型的转换,同时您可以使用ToCharArray将字符串转换为字符数组
  • 使用 PadLeft、PadRight 和 Create 的重载版本,在字符串中填入空白或特定字符。反之,则可以使用 TrimRight、TrimLeft 和 Trim 删除字符串一端或两端的空白
  • 使用Compare、CompareOrdinal、CompareText、CompareTo和Equals进行字符串比较和相等性测试,但请记住您还可以在某种程度上使用等于运算符和比较运算符
  • 使用LowerCase和UpperCase、ToLower和ToUpper以及ToUpperInvariant更改大小写
  • 使用Contains、StartsWith、EndsWith等操作测试字符串内容。在字符串中进行搜索可以使用IndexOf查找给定字符的位置(从开头或从给定位置开始),类似的IndexOfAny(查找字符数组中的一个元素),从字符串末尾向前搜索的LastIndexOf和LastIndexOfAny操作,以及特殊用途的IsDelimiter和LastDelimiter操作
  • 使用 Length(返回字符数)、CountChars(也考虑代理对)、GetHashCode(返回字符串的哈希值)等函数访问字符串的通用信息,以及各种 "空 "测试(包括 IsEmpty、IsNullOrEmpty 和 IsNullOrWhiteSpace)。
  • Split等字符串特殊操作,将字符串根据特定字符拆分为多个字符串,并使用QuotedString和DeQuoted在字符串周围添加或删除引号
  • 最后,使用 Chars[] 访问单个字符,它在方括号中包含字符串元素的数字索引。它只能用于读取数值(不能用于更改数值),并与所有其他字符串辅助操作一样使用基于零的索引。

​ 实际上,需要注意的是,所有字符串辅助方法都是按照许多其他语言所使用的字符串约定建立的,其中就包括字符串元素从 0 开始,直到字符串长度减 1 的概念。换句话说,正如我前面已经提到但值得再次强调的是,所有字符串辅助操作都使用基于零的索引作为参数和返回值。

注解:Split 操作是 Object Pascal RTL 中相对较新的操作。以前常用的方法是在指定一个特定的行分隔符后,将字符串赋值到一个字符串列表中,然后再访问这个列表中各个字符串或行。但是Split操作的效率和灵活性要高得多。

​ 鉴于您可能需要直接对字符串进行大量操作,我本可以创建多个项目来演示这些功能。然而,我还是坚持只进行一些相对简单的操作演示,尽管这些操作非常常见。

StringHelperTest 示例中有两个按钮。在每个按钮中,代码的第一部分都是构建并显示一个字符串:

varStr1, Str2: string;I, NIndex, NCount: Integer;
beginStr1 := '';// 创建字符串for I := 1 to 10 doStr1 := Str1 + 'Object ';Str2 := string.Copy(Str1);Str1 := Str2 + 'Pascal ' + Str2.SubString(10, 30);Show(Str1);

​ 请注意我是如何使用 Copy 函数来创建字符串数据的唯一副本,而不是别名的,尽管在这个特定的演示中,这并没有什么不同。最后的 SubString 调用用于提取字符串的一部分。结果文本如下:

Object Object Object Object Object Object Object Object Object Object Pascal ect Object Object Object Objec

​ 在初始化后,第一个按钮的代码用于搜索子字符串,并使用用户指定的索引重复搜索,以统计给定字符串(示例中为单字符)的出现次数:

// 查找子字符串
Show('Pascal at: ' +Str1.IndexOf('Pascal').ToString);
// 计算出现次数
I := -1;
NCount := 0;
repeatI := Str1.IndexOf('O', I + 1); // 从下一个元素开始搜索if I >= 0 thenInc(NCount); // 找到一个
until I < 0;
Show('O found: ' +NCount.ToString + ' times');

​ 我知道repeat循环并不是最简单的循环:它可以从负索引开始,因为任何后续搜索都从当前索引之后的索引开始;它计算出现次数;循环的终止是基于元素是否找到,如果没有找到,它会返回-1。代码的输出是:

Pascal at: 70
O found: 14 times

​ 第二个按钮的代码用于对字符串中的一个或多个元素进行搜索和替换。在第一部分,它创建了一个新字符串,复制了首尾部分,并在中间添加了一些新文本。在第二部分中,它使用了 Replace 函数,只需通过适当的标志 (rfReplaceAll) 即可对多个出现的内容进行操作。

// 单一替换
NIndex := Str1.IndexOf('Pascal');
Str1 := Str1.SubString(0, NIndex) + 'Object' +Str1.SubString(NIndex + ('Pascal').Length);
Show(Str1);// 多重替换
Str1 := Str1.Replace('O', 'o', [rfReplaceAll]);
Show(Str1);

​ 由于输出相当长且不容易阅读,我只列出了每个字符串的中间部分:

...Object Pascal ect. Object Object...
...Object Object ect. Object Object...
...object object ect. object object...

同样,这只是一个最小的示例,你可以使用该类型的类型辅助执行丰富的字符串操作。


http://www.ppmy.cn/news/1368834.html

相关文章

排序(3)——直接选择排序

目录 直接选择排序 基本思想 整体思路&#xff08;升序&#xff09; 单趟 多趟 代码实现 特性总结 直接选择排序 基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的…

2024 年广东省职业院校技能大赛(高职组)“云计算应用”赛项样题 2

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&#…

Hololens 2应用开发系列(1)——使用MRTK在Unity中设置混合现实场景并进行程序模拟

Hololens 2应用开发系列&#xff08;1&#xff09;——使用MRTK在Unity中进行程序模拟 一、前言二、创建和设置MR场景三、MRTK输入模拟的开启 一、前言 在前面的文章中&#xff0c;我介绍了Hololens 2开发环境搭建和项目生成部署等相关内容&#xff0c;使我们能生成一个简单Ho…

HG/T 2006-2022 热固性和热塑性粉末涂料检测

粉末涂料是指由树脂、固化剂、颜料、填料和助剂等组成的涂料&#xff0c;其中成膜过程中发生交联反应&#xff0c;形成的涂层受热不会熔化、流动&#xff0c;称为热固性粉末涂料&#xff1b;成膜过程中不发生交联反应&#xff0c;形成的涂层受热会再次熔化、流动&#xff0c;称…

Vmware esxi虚拟主机状态无效,无法注销重启等操作修复解决

问题 装有ESXI系统的服务器在强制关机启动后&#xff0c;显示虚拟机状态是无效的&#xff0c;并且无法进行任何操作。 解决办法 对出问题的虚拟机重新注册 1、开启esxi系统的ssh功能 2、取消注册出问题的虚拟机 找到问题的虚拟机 [rootlocalhost:~] vim-cmd vmsvc/getal…

python 基础知识点(蓝桥杯python科目个人复习计划56)

今日复习内容&#xff1a;做题 例题1&#xff1a;最小的或运算 问题描述&#xff1a;给定整数a,b&#xff0c;求最小的整数x&#xff0c;满足a|x b|x&#xff0c;其中|表示或运算。 输入格式&#xff1a; 第一行包括两个正整数a&#xff0c;b&#xff1b; 输出格式&#…

Redis相关学习

Redis 的访问速度比 MySql 快上万倍。因为Redis 在内存中使用&#xff0c;MySql 在硬盘上使用 Redis 和 MySql 相比最大的劣势是存储空间是有限的 redis 主要作为缓存、内存数据库、消息队列 在启动redis客户端的时候&#xff0c;加上--raw&#xff0c;可以让redis客户端将二…

KubeSphere平台安装系列之三【Linux多节点部署KubeSphere】(3/3)

**《KubeSphere平台安装系列》** 【Kubernetes上安装KubeSphere&#xff08;亲测–实操完整版&#xff09;】&#xff08;1/3&#xff09; 【Linux单节点部署KubeSphere】&#xff08;2/3&#xff09; 【Linux多节点部署KubeSphere】&#xff08;3/3&#xff09; **《KubeS…

速盾:服务器怎样加cdn

加速服务器可以通过使用内容分发网络&#xff08;CDN&#xff09;来实现&#xff0c;CDN是一种分布式网络架构&#xff0c;将网站的静态内容分发到多个服务器节点上&#xff0c;以提高用户访问速度和网站的性能。 首先&#xff0c;服务器需要选择一个合适的CDN服务供应商。市面…

一个脚本两步计算材料Raman谱(附数据处理和绘图脚本)

在以往推送中已经介绍了相当多的计算材料Raman的方法&#xff0c;使用的软件主要为Phonopy-Spectroscopy&#xff0c;相关软件还有vasp&#xff0c;phonopy&#xff0c;phono3py等。 Phonopy-Spectroscopy计算材料红外和Raman光谱 Phonopy-Spectroscopy 计算红外和拉曼光谱 也…

百度SEO快排原理是什么?如何快速排名方法?

前言&#xff1a;我之前说过我不打算写这个快速排序。 首先&#xff0c;我从来没有在自己的网站上操作过所谓的快速排序。 其次&#xff0c;我不能像网上很多人写的那样透露百度快速排序的秘密&#xff08;说实话&#xff0c;你可以透露秘密&#xff09;。 方法是有了&#xff…

Redis的高性能之道

前言&#xff1a;做码农这么多年&#xff0c;我也读过很多开源软件或者框架的源码&#xff0c;在我看来&#xff0c;Redis是我看过写得最优美、最像一件艺术品的软件&#xff0c;正如Redis之父自己说的那样&#xff0c;他宁愿以一个糟糕的艺术家身份而不是一名好程序员被别人记…

Python环境搭建:一站式指南

在当前AIGC技术蓬勃发展的背景下&#xff0c;Python作为人工智能领域最受青睐的编程语言之一&#xff0c;成为我们必须掌握的技能。因此&#xff0c;搭建一个适合自己的Python环境成为了每个Python开发者的首要任务。本文将为您提供一站式的Python环境搭建指南&#xff0c;帮助…

链路负载均衡之ISP选路

一、默认路由与链路备份 如图&#xff0c;企业分别从电信、联通租用一条链路&#xff0c;组成双出口网络&#xff0c;其中&#xff0c;电信为主链路、联通为备用链路。 在防火墙可配置两条默认路由&#xff0c;其中电信出口的默认路由优先级高于联通出口的默认路由&#xff0c…

江科大stm32学习笔记——【3-3】GPIO输入:按键控制led光敏传感器控制蜂鸣器

一.原理 1.传感器模块 传感器元件的电阻会随外界模拟量的变化而变化&#xff0c;通过定值电阻分压即可得到模拟电压输出&#xff0c;再通过电压比较器进行二值化即可得到数字电压输出。 2.硬件电路 1&#xff09;按键电路 上面两个是下接按键&#xff0c;下面两个是上接按键…

使用Xftp连接CentOS 7进行文件的传输

一、查看虚拟机IP地址 在虚拟机中打开终端输入 ifconfig &#xff1a; 我的虚拟机IP为192.168.23.131 二、打开XFtp 7连接虚拟机 其余设置为默认&#xff0c;点击连接后输入你的用户名和密码&#xff1a; 输入密码后弹出如下界面表示连接成功~ 三、传输文件 传输文件只需用鼠…

【牛客】SQL134 满足条件的用户的试卷完成数和题目练习数

描述 现有用户信息表user_info&#xff08;uid用户ID&#xff0c;nick_name昵称, achievement成就值, level等级, job职业方向, register_time注册时间&#xff09;&#xff1a; iduidnick_nameachievementleveljobregister_time11001牛客1号31007算法2020-01-01 10:00:00210…

Unity铰链四杆机构设计和运动仿真

一、效果图 设定好各边长度和转速后&#xff0c;点击【设置并启动】&#xff0c;自动生成一个机构模型&#xff0c;并按照原理进行运转 二、铰链四杆机构介绍 机架&#xff1a;A和D是固定位置&#xff0c;叫做机架。 曲柄&#xff1a;B点绕A点旋转&#xff0c;构成曲柄。 连…

神经网络算法:卷积神经网络

神经网络算法&#xff0c;也称为人工神经网络算法&#xff0c;是一种模仿人脑神经网络结构和功能的计算模型。它由多个神经元相互连接而成的网络组成&#xff0c;每个神经元都有输入和输出&#xff0c;并通过学习算法来调整连接权重&#xff0c;从而实现对输入数据的模式识别和…

计算机操作系统(慕课版)第六章 虚拟存储器 学习笔记

第六章 虚拟存储器 详读课本的页面置换算法 6.1.1 虚拟存储器概述 常规存储管理方式的共同点&#xff1a; 要求一个作业全部装入内存后方能运行。 问题&#xff1a; (1)有的作业很大,所需内存空间大于内存总容量,使作业无法运行。 (2)有大量作业要求运行&#xff0c;但内存容…
最新文章