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(传的参数,匹配字段) 例 ...
随机推荐
- vue异步组件
- 你做的 9 件事表明你不是专业的 Python 开发人员
本文转载自国外论坛 medium,原文地址: https://medium.com/navan-tech/7-java-features-you-might-not-have-heard-of-ade ...
- hello world 的并发实现
本篇文章将介绍 hello world 的并发实现,其中涉及到的知识有: 并发与并行 GPM 调度系统 并发与并行 并发不是并行.并发是同时管理很多事情,这些事情可能只做了一半就被暂停做别的事情了.而 ...
- 用线性二次模型建模大型数据中心,基于 MPC 进行冷却控制
目录 一个总述 reviews 0 abstract 1 intro 2 related work 3 DC cooling(问题定义) 4 MPC(method) 4.1 Model structu ...
- Angular系列教程之DOM操作
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- SD-Host控制器设计架构
SD Host功能列表 SD Host挂接在SoC中,与外部的SD card进行交互 有控制寄存器和状态寄存器,SoC往往有CPU,通过CPU进行配置寄存器,有些SoC没有CPU,需要使用I2C或者S ...
- Vue事件方法中this.属性名
vue事件方法中访问data对象中的成员 : this.属性名 注意: 如果事件处理代码没有写到methods中,而是写在行内则不需要this.
- 关于decimal非常浅显的学习与整理
关于decimal非常浅显的学习与整理 背景知识 整数,小数,浮点,定点 整数(Integer)是没有小数部分的数值,可以是正数.负数或零.在计算机中,整数通常以二进制形式存储. 小数(Decimal ...
- 获取特定端口java进程的路径的shell脚本
获取特定端口java进程的路径的shell脚本 ll /proc/`lsof -i:5200 |grep ^java |awk '{print $2}' |uniq` |grep cwd |cut - ...
- Springboot actuator的简单使用
Springboot actuator的简单使用 简介 公司基于springboot研发的系统,开发已经默认集成了actuator 为了安全起见这个插件模式是不开启的. 今天与研发同事进行了沟通,简单 ...