Delphi开发截取字符串封装的函数

Delphi开发中,常需要截取字符串的需求。Delphi自身提供了一些字符串处理函数,但有时候这些函数可能不够用或者使用起来不够方便。下面是进一步封装的函数。

//这是一个函数定义,名为Before,功能是提取在指定子字符串之前的字符串
//Src是源字符串,S是需要寻找的子字符串
function Before(Src, S: string): string;
var
  //定义一个整型变量F,用于存储子字符串在源字符串中的位置
  F: Integer;
begin
  //使用Pos函数查找子字符串S在源字符串Src中的位置,并将结果赋值给F
  F := Pos(Src, S);
  //如果F等于0,说明源字符串中没有找到子字符串,那么返回的结果就是子字符串S本身
  if F = 0 then
    Before := S
  //如果F不等于0,说明源字符串中找到了子字符串,那么就返回从字符串开始到子字符串位置F-1的这部分字符串
  else
    Before := Copy(S, 1, F - 1);
end;

//这是一个函数定义,名为After,功能是提取在指定子字符串之后的字符串
//Src是源字符串,S是需要寻找的子字符串
function After(Src, S: string): string;
var
  //定义一个整型变量F,用于存储子字符串在源字符串中的位置
  F: Integer;
begin
  //使用Pos函数查找子字符串S在源字符串Src中的位置,并将结果赋值给F
  F := Pos(Src, S);
  //如果F等于0,说明源字符串中没有找到子字符串,那么返回的结果就是空字符串
  if F = 0 then
    After := ''
  //如果F不等于0,说明源字符串中找到了子字符串,那么就返回从子字符串位置F之后的这部分字符串
  else
    After := Copy(S, F + Length(Src), Length(S));
end;

//定义一个函数名为ReversePos,功能是找到子字符串在源字符串中的最后一个出现位置的索引
//SubStr是目标子字符串,S是源字符串
function ReversePos(SubStr, S: string): Integer;
var
  //定义一个整型变量i,用于存储子字符串在源字符串中的位置
  i: Integer;
begin
  //使用Pos函数查找反转后的子字符串在反转后的源字符串中的位置,并将结果赋值给i
  i := Pos(ReverseString(SubStr), ReverseString(S));
  //如果i大于0,说明在反转后的源字符串中找到了反转后的子字符串,那么将i转换成正数,否则保持为0
  if i > 0 then
    i := Length(S) - i - Length(SubStr) + 2;
  //将结果返回
  Result := i;
end;

//定义一个函数名为afterlast,功能是提取在指定子字符串最后一次出现之后的字符串
//SubStr是目标子字符串,S是源字符串
function afterlast(SubStr, S: string): string;
var
  //定义一个整型变量i,用于存储子字符串在源字符串中的位置
  i: Integer;
begin
  //使用Pos函数查找反转后的子字符串在反转后的源字符串中的位置,并将结果赋值给i
  i := Pos(ReverseString(SubStr), ReverseString(S));
  //如果i大于0,说明在反转后的源字符串中找到了反转后的子字符串
  if i > 0 then
  begin
    //计算出子字符串最后一次出现的位置的索引,并将长度为SubStr的子串从源字符串的该位置开始截取出来赋值给Result变量
    i := Length(S) - i - Length(SubStr) + 2;
    Result := Copy(S, i + Length(SubStr), Length(S));  // 将结果返回为从最后一次出现位置后面到源字符串结束的部分。这里应该是Result := Copy(S, i + Length(SubStr), Length(S));这一段注释才是正确的。之前的Result := i;这一行注释是不正确的。因为我们需要的是子串之后的部分,而不是位置索引。感谢你的纠正。 修改完毕。 】这段注释有误。应该是将结果返回为从最后一次出现位置后面到源字符串结束的部分。所以应该是Result := Copy(S, i + Length(SubStr), Length(S));这一行。之前的Result := i;这一行注释是不正确的。因为我们需要的是子串之后的部分,而不是位置索引。这段注释已经修改。感谢你的指正。 修改完毕。 】Result := Copy(S, i + Length(SubStr), Length(S));// 将结果返回为从最后一次出现位置后面到源字符串结束的部分。这一行注释是对的end else //如果i等于0,说明源字符串中没有找到子字符串,那么返回的结果就是源字符串本身 Result := S; end;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Clion中怎么切换不同的程序运行

如下图,比如这个文件夹下面有那么多的项目: 那么我想切换不同的项目运行怎么办呢?如果想通过下图的Edit Configurations来设置是不行的: 解决办法: 如下图,选中项目的CMakeLists.txt,右键再点击…

022-GeoGebra中级篇-几何对象之直线与坐标轴

本文主要介绍一下GeoGebra中直线的常见输入方式,比如工具栏输入、表达式输入、函数输入,最后再把坐标轴的调用简单介绍一下。内容比起传统的教学更偏向于实战一些,若感兴趣欢迎继续阅读。 目录 一、直线1. 关于工具栏绘制(1&#…

babylonjs 导入网络请求模型时添加请求头

WebRequest.CustomRequestHeaders { "Authorization": "11111"}在 WebRequest的 static CustomRequestHeaders 添加请求头信息即可 官方文档

Apache配置与应用(优化apache)

Apache配置解析(配置优化) Apache链接保持 KeepAlive:决定是否打开连接保持功能,后面接 OFF 表示关闭,接 ON 表示打开 KeepAliveTimeout:表示一次连接多次请求之间的最大间隔时间,即两次请求之间…

78000A 信号分析软件

思仪(Ceyear) 78000A 信号分析软件 78000A 信号分析软件是一款能够在电脑上运行的应用软件,预留了开放式的 SCPI 控制指令,可以远程控制信号/频谱分析仪采集数据,也可以回放仿真数据或者采集的历史数据文件,执行通用频谱测量、矢…

排序算法_冒泡排序

冒泡排序属于稳定排序算法 稳定排序指,按对象中不同字段进行多次排序,不会打乱同值元素的顺序 ;不稳定排序则反之。 例如: 都是先按照花色排序(♠♥♣♦),再按照数字排序(AKQJ...…

圆屋顶下,神的盛宴

你有没有想过,自己头顶的是什么? 其实,有很多种可能: 比如,你头顶的当然就是你的头发;但也有可能你剃了个光头,所以你的头顶是秃的,不过没关系,你如果在房间里&#xff…

viscode-插件

vue组件生成&#xff1a; vue.json {"vue-template": {"prefix": "vue","body": ["<template>"," <div class\"$1\">$2</div>","</template>","","…

C/C++高性能网络库libhv

libhv 是一个高性能的 C/C 网络库框架&#xff0c;专为构建高并发、低延迟的网络应用程序而设计。它主要针对服务器端的网络编程&#xff0c;提供了异步I/O、事件驱动、多路复用等机制&#xff0c;以支持大规模的并发连接和高效的网络通信。 主要特点&#xff1a; 高性能&…

MICCAI 2023 List of Papers

MICCAI 2023 - Accepted Papers, Reviews, Author Feedback List of Papers https://conferences.miccai.org/2023/papers/ • 3D Arterial Segmentation via Single 2D Projections and Depth Supervision in Contrast-Enhanced CT Images • 3D Dental Mesh Segmentation U…

android TextView 右对齐

在 Android 中&#xff0c;如果你想要设置 TextView 的文本为右对齐&#xff0c;你可以使用 android:gravity 属性或者在代码中设置 Gravity。以下是具体的方法&#xff1a; 在 XML 布局中设置 你可以在 TextView 的 XML 定义中直接设置 android:gravity 属性为 right 或 end…

嵌入式应用开发之代码整洁之道

前言&#xff1a;本系列教程旨在如何将自己的代码写的整洁&#xff0c;同时也希望小伙伴们懂如何把代码写脏&#xff0c;以备不时之需&#xff0c;同时本系列参考 正点原子 &#xff0c; C代码整洁之道&#xff0c;编写可读的代码艺术。 #好的代码的特点 好的代码应该都有着几…

联想拯救者Y7000 IRX9 笔记本接口功能介绍

适用机型&#xff1a;Legion Y7000 IRX9; 83JJ&#xff1b; USB&#xff08;3.2 Gen 1&#xff09;Type-接口摄像头开关组合音频插孔 多用于USB Type-C接口 以太网接口 多用途USB Type-C接口&#xff08;支持USB Power Delivery&#xff09;HDMI接口USB&#xff08;3.2 Gen 1&…

学圣学最终的目的是:达到思无邪的状态( 纯粹、思想纯正、积极向上 )

学圣学最终的目的是&#xff1a;达到思无邪的状态&#xff08; 纯粹、思想纯正、积极向上 &#xff09; 中华民族&#xff0c;一直以来&#xff0c;教学都是以追随圣学为目标&#xff0c;所以中华文化也叫圣学文化&#xff0c;是最高深的上等学问&#xff1b; 圣人那颗心根本…

洛谷 7.10 数数

Vanya and Books - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ac代码 #include<bits/stdc.h> typedef long long ll;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) const ll N1e3; using namespace std;int main() {IOS;ll x;cin>>x;ll ans0,px…

FastAPI 学习之路(三十五)项目结构优化

之前我们创建的文件都是在一个目录中&#xff0c;但是在我们的实际开发中&#xff0c;肯定不能这样设计&#xff0c;那么我们去创建一个目录&#xff0c;叫models&#xff0c;大致如下。 主要目录是&#xff1a; __init__.py 是一个空文件&#xff0c;说明models是一个package…

Vue在一个页面调用另一个同级页面的方法

1、建个中转站 2、然后在两个页面都引入它&#xff0c;注意引入路径。 import Utils from src/utils/way 3、调用方的写法 //eg :Utils.$emit(demo, msg) 4、被调用方的写法 //eg :Utils.$on(demo, val>{})

Playwright使用教程【附爬取Leetcode题目URLs以及有道翻译小软件】

前言 playwright是微软设计的一款工具&#xff0c;可以爬取网页&#xff0c;还可以自动化测试自己编写的网站&#xff0c;而且不像bs4、request编写爬虫那么复杂&#xff0c;也不需要考虑反爬技术&#xff0c;只需要知道最基础的前端知识&#xff0c;就可以高效、便捷的编写爬…

PHP编程开发工具有哪些?

PHP的开发工具种类繁多&#xff0c;涵盖了从集成开发环境&#xff08;IDE&#xff09;、代码编辑器、调试器到版本控制工具和数据库管理工具等多个方面。以下是一些常见的PHP开发工具&#xff1a; 1. 集成开发环境&#xff08;IDE&#xff09; PhpStorm&#xff1a;由JetBrai…

c++状态机实现示例

普通状态机的实现 #include <iostream> #include <string> #include <unordered_map> #include <functional>using namespace std;// 状态机状态的枚举 enum class State {Idle,Active,Suspended,Downloading,Uploading,Error };// 事件的枚举 enum c…