[重点]delphi删除部分字符串(不区分大小写)
type
TDelFlags = set of (dfDelBefore, dfDelAfter);
//删除ms字符串中endstr子字符串前面或后面的部分字符串
procedure Delstr(var ms: String; endstr: String; Flags: TDelFlags;
bself: Boolean = True);
var
l: Integer;
begin
l := length(endstr);
if pos(AnsiLowercase(endstr), AnsiLowercase(ms))=0 then
begin
exit;
end;
if dfDelBefore in Flags then
begin
if bself then
Delete(ms, 1, pos(AnsiLowercase(endstr), AnsiLowercase(ms)) + l - 1)
else
Delete(ms, 1, pos(AnsiLowercase(endstr), AnsiLowercase(ms)) - 1)
end
else
begin
if bself then
Delete(ms, pos(AnsiLowercase(endstr), AnsiLowercase(ms)), length(ms))
else
Delete(ms, pos(AnsiLowercase(endstr), AnsiLowercase(ms)) + l, length(ms))
end;
end;
//从src主字符串中截取两个字符串(str1和str2)之间的部分字符串
function GetCenterStr(src, str1, str2: string): string;
var
i, i2, i3: integer;
begin
i := 0;
i2 := 0;
i3 := 0;
Delstr(src, str1, [dfDelBefore]);
i := pos(AnsiLowercase(str1), AnsiLowercase(src));
i3 := pos(AnsiLowercase(str2), AnsiLowercase(src));
result := copy(src, i2 + 1, i3 - i2 - 1);
end;
/////////////////////// Delstr函数的升级版如下 ////////////////////////////
function fastStrCopy(S:string;Index:integer;count:integer):string;
var
sLen: Integer;
begin
//此函数类似copy函数,但在拷贝大量字符串时比较copy函数的效率高很多。
Result:=S;
{
拷贝全部字符串
SetLength(Result,length(S));
MoveMemory(@Result[1],@S[1],bytelength(S));
}
//拷贝部分字符串
sLen:=0;
sLen:=length(S);
if(sLen<Index+count) then count:=sLen-Index+1;
SetLength(Result,count);
MoveMemory(@Result[1],@S[Index],count*sizeof(widechar));
end;
function FastStrCopy2(S: String; Index: Integer; Count: Integer): String;
var
p: PChar;
buf: LPCWSTR;
begin
p := PChar(S);
getMem(buf, bytelength(s));
try
inc(p, Index - 1);
//lstrcpyn 复制字符串, 同时指定要复制的长度
lstrcpyn(buf, p, Count + 1);
Result := String(buf);
finally
freemem(buf);
end;
end;
type
TDelFlags = set of (dfDelBefore, dfDelAfter);
function Delstr(var ms: String; endstr: String; Flags: TDelFlags;
bself: Boolean = True): String;
var
l: Integer;
begin
l := length(endstr);
if dfDelBefore in Flags then
begin
if bself then
begin
Result := fastStrCopy(ms, 1, pos(endstr, ms) + l - 1);
Delete(ms, 1, pos(endstr, ms) + l - 1);
end
else
begin
Result := fastStrCopy(ms, 1, pos(endstr, ms) - 1);
Delete(ms, 1, pos(endstr, ms) - 1);
end;
end
else
begin
if bself then
begin
Result := fastStrCopy(ms, pos(endstr, ms), length(ms));
Delete(ms, pos(endstr, ms), length(ms));
end
else
begin
Result := fastStrCopy(ms, pos(endstr, ms) + l, length(ms));
Delete(ms, pos(endstr, ms) + l, length(ms));
end;
end;
end;
[重点]delphi删除部分字符串(不区分大小写)的更多相关文章
- Delphi中常用字符串处理函数
.copy(str,pos,num) 从str字符串的pos处开始,截取num个字符的串返回. 假设str为,)=,)='def' .concat(str1,str2{,strn}) 把各自变量连接起 ...
- Delphi反汇编内部字符串处理函数/过程不完全列表
Delphi反汇编内部字符串处理函数/过程不完全列表 名称 参数 返回值 作用 等价形式 / 备注 _PStrCat EAX :目标字符串 EDX :源字符串 EAX 连接两个 Pascal 字符 ...
- Delphi反汇编内部字符串处理函数不完全列表
Delphi反汇编内部字符串处理函数/过程不完全列表 名称 参数 返回值 作用 等价形式 / 备注 _PStrCat EAX :目标字符串 EDX :源字符串 EAX 连接两个 Pascal 字符串 ...
- C#中如何排除/过滤/清空/删除掉字符串数组中的空字符串
C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...
- String的两个API,判断指定字符串是否包含另一字符串,在字符串中删除指定字符串。
// 在字符串中删除指定字符串. String phoneNum="1795112345"; phoneNum = phoneNum.replace("17951&quo ...
- C语言strcmp()函数:比较字符串(区分大小写)
头文件:#include <string.h> strcmp() 用来比较字符串(区分大小写),其原型为: int strcmp(const char *s1, const char *s ...
- 关于Delphi中的字符串的浅析(瓢虫大作,里面有内存错误的举例)
关于Delphi中的字符串的浅析 只是浅浅的解析下,让大家可以快速的理解字符串. 其中的所有代码均在Delphi7下测试通过. Delphi 4,5,6,7中有字符串类型包括了: 短字符串(Short ...
- 使用C#删除一个字符串数组中的空字符串
C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...
- delphi XE的字符串处理
最近用delphi xe做了个东西,因为以前一直使用Delphi 7做开发,delphi 7 到delphi XE有了很大的变化,最大的变化就是对Unicode的支持,所以刚开始使用DELPHI XE ...
随机推荐
- 支持向量机(SVM)算法分析——周志华的西瓜书学习
1.线性可分 对于一个数据集: 如果存在一个超平面X能够将D中的正负样本精确地划分到S的两侧,超平面如下: 那么数据集D就是线性可分的,否则,不可分. w称为法向量,决定了超平面的方向:b为位移量,决 ...
- EXT.NET 一些用法
EXT.NET 一些用法 <ext:GridPanel ClicksToEdit="1" <%-- 点击几下单元格可编辑 1 代表单击一下.--%> > & ...
- cordova 常用操作
#创建插件 plugman create --name MyMath --plugin_id SimpleMath --plugin_version #进入插件目录 cd MyMath #plugin ...
- Android短信收发(二)
接收SMS类,代码如下 //for receive SMS private SmsReceiver mSmsReceiver; @Override protected void onResume() ...
- DB通用类:Access通用类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- scrapy框架之分布式操作
分布式概念 分布式爬虫: 1.概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取. 2.原生的scrapy是不可以实现分布式爬虫? a)调度器无法共享 b)管道无法共享 3.scrapy- ...
- CS229 6.7 Neurons Networks whitening
PCA的过程结束后,还有一个与之相关的预处理步骤,白化(whitening) 对于输入数据之间有很强的相关性,所以用于训练数据是有很大冗余的,白化的作用就是降低输入数据的冗余,通过白化可以达到(1)降 ...
- tomcat8+memcached session共享
一.环境准备 时间同步(同步后确认各服务器时间是否一致,不一致需要修改一下时区) 关闭防火墙 软件包和jar包链接:https://pan.baidu.com/s/1sl9Nob7 二.安装配置ngi ...
- tkinter简单使用
第一个运行程序 # -*- coding: utf-8 -*- import tkinter as tk //引入 root = tk.Tk() // 实例化root T大写k小写 root.titl ...
- JVM总结-垃圾回收(下)
大部分的 Java 对象只存活一小段时间,而存活下来的小部分 Java 对象则会存活很长一段时间. 之所以要提到这个假设,是因为它造就了 Java 虚拟机的分代回收思想.简单来说,就是将堆空间划分为两 ...