Delphi判断一个字符串在另一个字符串中出现的次数 7个方法的效率对比。
unit Unit14; interface uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.StrUtils, Vcl.StdCtrls; type
TForm14 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form14: TForm14; implementation {$R *.dfm} uses QString; function GetStrNum(const SubStr, S: string): Integer;
var
I: Integer;
begin
Result := 0;
I := PosEx(SubStr, S, 1);
if I > 0 then
Inc(Result)
else
Exit; while (I > 0) and (I < Length(S)) do
begin
I := PosEx(SubStr, S, I + 1);
if I > 0 then
Inc(Result);
end;
end; function StrPostime(Str:string;P:string):integer;
var i,n:integer;
begin
n:=0;
for i:=1 to length(str) do
begin
if copy(str,i,length(p))=P then n:=n+1;
end;
StrPostime:=n;
end; function SubStrConut(mStr: string; mSub: string): Integer;
{ 返回子字符串出现的次数 }
begin
Result :=
(Length(mStr) - Length(StringReplace(mStr, mSub, '', [rfReplaceAll]))) div
Length(mSub);
end; { SubStrConut } function StrPosCount(subs:string;source:string):integer;
var
Str : string;
begin
Result := 0;
str := source;
while Pos(Subs,Str)<>0 do
begin
Delete(Str,Pos(Subs,Str),Length(Subs));
Inc(Result);
end;
end; function InStrTimes(const AShortStr,ASourceStr: string): Integer;
var
MyArrS: TArray<string>;
begin
MyArrS := ASourceStr.Split([AShortStr], ExcludeEmpty);
Exit(Length(MyArrS)-1);
end; procedure TForm14.Button1Click(Sender: TObject);
var
n: Cardinal;
I: Integer;
begin
//------------------------------------
n := GetTickCount;
for I := 0 to 1000000 do
begin
LeftStrCount('我靠你的我爱你的你不爱我的我不爱你的真心的很爱你的爱你的还需要理由吗','爱你的',false);
end;
n := GetTickCount - n;
Text := IntToStr(n) + ' - '; //------------------------------------
n := GetTickCount;
for I := 0 to 1000000 do
begin
RightStrCount('我靠你的我爱你的你不爱我的我不爱你的真心的很爱你的爱你的还需要理由吗','爱你的',false);
end;
n := GetTickCount - n;
Text := Text + IntToStr(n) + ' - '; //------------------------------------
n := GetTickCount;
for I := 0 to 1000000 do
begin
GetStrNum('爱你的','我靠你的我爱你的你不爱我的我不爱你的真心的很爱你的爱你的还需要理由吗');
end;
n := GetTickCount - n;
Text := Text + IntToStr(n) + ' - '; //------------------------------------
n := GetTickCount;
for I := 0 to 1000000 do
begin
StrPostime('我靠你的我爱你的你不爱我的我不爱你的真心的很爱你的爱你的还需要理由吗','爱你的');
end;
n := GetTickCount - n;
Text := Text + IntToStr(n) + ' - '; //------------------------------------
n := GetTickCount;
for I := 0 to 1000000 do
begin
SubStrConut('我靠你的我爱你的你不爱我的我不爱你的真心的很爱你的爱你的还需要理由吗','爱你的');
end;
n := GetTickCount - n;
Text := Text + IntToStr(n) + ' - '; //------------------------------------
n := GetTickCount;
for I := 0 to 1000000 do
begin
StrPosCount('爱你的','我靠你的我爱你的你不爱我的我不爱你的真心的很爱你的爱你的还需要理由吗');
end;
n := GetTickCount - n;
Text := Text + IntToStr(n) + ' - '; //------------------------------------
n := GetTickCount;
for I := 0 to 1000000 do
begin
InStrTimes('爱你的','我靠你的我爱你的你不爱我的我不爱你的真心的很爱你的爱你的还需要理由吗');
end;
n := GetTickCount - n;
Text := Text + IntToStr(n); end; end.

可见第三个是最快的。
隔离出来第三个备份下:
function InStrTimes(const ASubStr,ASourceStr: string): Integer;
var
I: Integer;
begin
Result := 0;
I := PosEx(ASubStr, ASourceStr, 1);
if I > 0 then
begin
Inc(Result);
end else begin
Exit;
end;
while (I > 0) and (I < Length(ASourceStr)) do
begin
I := PosEx(ASubStr, ASourceStr, I + 1);
if I > 0 then
begin
Inc(Result);
end;
end;
end;
Delphi判断一个字符串在另一个字符串中出现的次数 7个方法的效率对比。的更多相关文章
- Java字符串连接的多种实现方法及效率对比
JDK 1.8(Java 8)里新增String.join()方法用于字符串连接.本文基于<Java实现String.join()和效率比较>一文,分析和比较四种自定义实现与String. ...
- C#三种字符串拼接方法的效率对比
C#字符串拼接的方法常用的有:StringBuilder.+.string.Format.List<string>.使用情况不同,效率不同. 1.+的方式 string sql = &qu ...
- 一个解决在非UI线程中访问UI 异常的小方法
写 WPF 的童鞋可能都会碰到 在非UI线程中访问 UI 异常的问题.这是为了防止数据不一致做的安全限制. 子线程中更新UI还要交给主线程更新,引用满天飞,实在是麻烦. 接下来,我们推出一个可以称之为 ...
- 给出N个字符串恰好由三位字母(大小写)组成,再给出M个查询字符串,问每个查询字符串在N个字符中出现的次数。
1 #include<cstdio> 2 const int maxn = 100; 3 char S[maxn][5], temp[5]; 4 int hashTable[52 * 52 ...
- java程序员的从0到1:统计某字符串在某文件中出现的次数(面试题)
目录: 1. 编程题目 2. 方法一 3. 方法二 4. 方法三 5. 方法四 6. 总结 正文: 1. 编程题目 写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数. 2. ...
- 编写Java程序,读取文本文档的内容,去除文本中包含的“广告”字样,把更改后的内容保存到一个新的文本文档中
查看本章节 查看作业目录 需求说明: 读取文本文档的内容,去除文本中包含的"广告"字样,把更改后的内容保存到一个新的文本文档中 实现思路: 在main() 方法中,使用 new F ...
- php字符串统计次数的各种方法(转)
<?php $str = 'AbCdEfGaBcDeFgH0234;,!-AaBbCcDdEeFfGg'; $str = strtoupper($str); // 不区分大小写时,全部转换成大写 ...
- C#算法之判断一个字符串是否是对称字符串
记得曾经一次面试时,面试官给我电脑,让我现场写个算法,判断一个字符串是不是对称字符串.我当时用了几分钟写了一个很简单的代码. 这里说的对称字符串是指字符串的左边和右边字符顺序相反,如"abb ...
- php 判断字符串在另一个字符串中位置
$email='user@example.com'; //定义字符串$result=strstr($email,'@'); //返回子字符串echo $result; / ...
- mysql判断表里面一个逗号分隔的字符串是否包含单个字符串、查询结果用逗号分隔
1.mysql判断表里面一个逗号分隔的字符串是否包含单个字符串 : FIND_IN_SET select * from tablename where FIND_IN_SET(传的参数,匹配字段) 例 ...
随机推荐
- uniapp解决图形验证码问题及arraybuffer二进制转base64格式图片
https://www.cnblogs.com/huihuihero/p/13183031.html
- spring IoC 源码
spring IoC 容器的加载过程 1.实例化容器: AnnotationConfigApplicationContext 实例化工厂: DefauiltListableBeanFactory 实例 ...
- Hive(3)-Hive数据类型
1. 基本数据类型 对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数 Hive数据类型 ...
- JavaScript : 获取文件名后缀
/** 获取文件后缀 * * indexOf 和 lastIndexOf 都是索引文件 indexO ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.21)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.02)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- [转帖]Linux中查看各文件夹大小命令du -h --max-depth=1
https://www.cnblogs.com/the-tops/p/8798678.html 最近排查服务器异常的时候,常会遇到磁盘慢的情况,这个时候,查找那个文件夹占用的内存的时候常用到这个命令: ...
- [转帖]linux之iftop命令
https://rumenz.com/rumenbiji/linux-iftop.html Linux安装iftop > yum install iftop -y > iftop 界面如下 ...
- [转帖]Jmeter跨线程组传参
https://www.cnblogs.com/a00ium/p/10462576.html 我们知道,同一线程组中可以通过"正则表达式提取器"获取其中一个取样器的响应结果中的 ...
- 【转帖】JVM的发展历程
目录 1.Sun Classic VM 2.Exact VM 3.Sun HotSpot(主流) 4.JRockit 5.IBM J9 6.下一代虚拟机Graal VM 1.Sun Classic V ...