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个方法的效率对比。的更多相关文章

  1. Java字符串连接的多种实现方法及效率对比

    JDK 1.8(Java 8)里新增String.join()方法用于字符串连接.本文基于<Java实现String.join()和效率比较>一文,分析和比较四种自定义实现与String. ...

  2. C#三种字符串拼接方法的效率对比

    C#字符串拼接的方法常用的有:StringBuilder.+.string.Format.List<string>.使用情况不同,效率不同. 1.+的方式 string sql = &qu ...

  3. 一个解决在非UI线程中访问UI 异常的小方法

    写 WPF 的童鞋可能都会碰到 在非UI线程中访问 UI 异常的问题.这是为了防止数据不一致做的安全限制. 子线程中更新UI还要交给主线程更新,引用满天飞,实在是麻烦. 接下来,我们推出一个可以称之为 ...

  4. 给出N个字符串恰好由三位字母(大小写)组成,再给出M个查询字符串,问每个查询字符串在N个字符中出现的次数。

    1 #include<cstdio> 2 const int maxn = 100; 3 char S[maxn][5], temp[5]; 4 int hashTable[52 * 52 ...

  5. java程序员的从0到1:统计某字符串在某文件中出现的次数(面试题)

    目录: 1. 编程题目 2. 方法一 3. 方法二 4. 方法三 5. 方法四 6. 总结 正文: 1. 编程题目 写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数. 2. ...

  6. 编写Java程序,读取文本文档的内容,去除文本中包含的“广告”字样,把更改后的内容保存到一个新的文本文档中

    查看本章节 查看作业目录 需求说明: 读取文本文档的内容,去除文本中包含的"广告"字样,把更改后的内容保存到一个新的文本文档中 实现思路: 在main() 方法中,使用 new F ...

  7. php字符串统计次数的各种方法(转)

    <?php $str = 'AbCdEfGaBcDeFgH0234;,!-AaBbCcDdEeFfGg'; $str = strtoupper($str); // 不区分大小写时,全部转换成大写 ...

  8. C#算法之判断一个字符串是否是对称字符串

    记得曾经一次面试时,面试官给我电脑,让我现场写个算法,判断一个字符串是不是对称字符串.我当时用了几分钟写了一个很简单的代码. 这里说的对称字符串是指字符串的左边和右边字符顺序相反,如"abb ...

  9. php 判断字符串在另一个字符串中位置

    $email='user@example.com';        //定义字符串$result=strstr($email,'@');         //返回子字符串echo $result; / ...

  10. mysql判断表里面一个逗号分隔的字符串是否包含单个字符串、查询结果用逗号分隔

    1.mysql判断表里面一个逗号分隔的字符串是否包含单个字符串 : FIND_IN_SET select * from tablename where FIND_IN_SET(传的参数,匹配字段) 例 ...

随机推荐

  1. 基于java+springboot的求职招聘网站-求职招聘管理系统

    该系统是基于java+springboot开发的求职招聘网站.网上招聘管理系统.网上人才招聘系统.毕业生求职招聘系统.大学生求职招聘系统.校园招聘系统.企业招聘系统.是给师弟开发的毕业设计.大家学习过 ...

  2. SV Interface and Program

    内容 验证平台与待测设计的连接 VTB driver和dut之间的连线通过tb中声明wire连线 通过例化dut的方式进行连接 A module的input连接到B module的output SVT ...

  3. strlen和sizeof区别

    strlen 和 sizeof 是 C/C++ 中用于获取字符串长度或数据类型大小的两个不同的操作. 1.strlen: strlen 是在 C 语言和 C++ 中用于获取以空字符 ('\0') 结尾 ...

  4. JMS 服务器健康检查

    JMS所有服务器程序,包括Gateway.GatewayReferee.Proxy.TokenServer.以及编写的微服务器,都支持使用第三方工具进行健康检查. 使用telnet 进行健康检查 向任 ...

  5. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.1)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  6. Qt5.9 UI设计(二)——最简Qt工程搭建

    前言 前面一章已经介绍了QT的开发环境的安装,这里介绍一下一个最简工程的搭建 操作步骤 新建项目 选择带界面的Qt Widgets Application 设置项目位置 注意这里的目录不能有中文路径 ...

  7. [转帖]Nginx内置变量以及日志格式变量参数详解

    https://www.cnblogs.com/wajika/p/6426270.html $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求 ...

  8. [转帖]【性能】大页内存 (HugePages)在通用程序优化中的应用

    目录 1. 背景 2. 基于指纹的音乐检索简介 3. 原理 4. 小页的困境 5. 大页内存的配置和使用 6. 大页内存的优化效果 7. 大页内存的使用场景 8. 总结 LD_PRELOAD用法 原文 ...

  9. [转帖]《Linux性能优化实战》笔记(十五)—— 磁盘IO的工作原理

    前一篇介绍了文件系统的工作原理,这一篇来看看磁盘IO的工作原理 一. 磁盘 1. 按存储介质分类 磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘. 机械磁盘, ...

  10. [转帖]【有效解决】Edge浏览器提示你的连接不是专用连接怎么办?

    https://www.xitongzhijia.net/xtjc/20230524/290887.html Win11正式版iso镜像最新(22H2新版) V2023 大小:4.22 GB类别:Wi ...