有一个字符串,用|分隔,如何取出各个部分?

FigoZhu 2006-06-26 05:36:10
有一个字符串,用|分隔,如何取出各个部分?
例如,字符串如下:
中文|english|123456||结束了|

要求能分别取得:
中文
english
123456
// 这里应该是空串
结束了
...全文
439 15 打赏 收藏 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxtnt 2006-07-01
  • 打赏
  • 举报
回复
不用这么复杂!更用不着动用TSTRINGLIST它老人家!

Function x(s;string;index:integer;sp:char):String;
var
i,ipos,temppos,len:integer;
begin
i:=1;
ipos:=0;
temppos:=1;
len:=length(s);
while i<len do
begin
if s[i]=sp then
begin
inc(ipos);
if ipos=index then
begin
result:=copy(s,tempos,i-tempos);
break;
end;
temppos:=i;
end;
inc(i);
end;
end;
hanyel 2006-07-01
  • 打赏
  • 举报
回复
樓上拽!正解決
手指风 2006-07-01
  • 打赏
  • 举报
回复
如果用d提供的基本方法不能实现就自己写一个,就一个递归pos差不多就能解决了吧
belllab 2006-06-30
  • 打赏
  • 举报
回复
Use XMLUtil
Split0()
risingsoft 2006-06-30
  • 打赏
  • 举报
回复
type
TSplitArray=array of string;
PSplitArray=^TSplitArray;
TSplit=class(TStringList)
public
function Split(str:string;Delimiter:string):TSplitArray;
function SplitStr(str:string;Delimiter:string):TSplitArray;
end;

{ TSplit }

function TSplit.Split(str, Delimiter: string): TSplitArray;
var
i:integer;
begin
if length(Delimiter)>0 then
self.Delimiter := Delimiter[1]
else
self.Delimiter := char(pchar(''));
self.DelimitedText := str;

setLength(result,count);
for i := 0 to count - 1 do
begin
result[i] := Strings[i];
end;
end;

function TSplit.SplitStr(str, Delimiter: string): TSplitArray;
var
temp:string;
i:integer;
ArraySize:integer;
begin
temp := str;
ArraySize := 0;

while pos(Delimiter,temp) > 0 do
begin
inc(ArraySize);
setLength(result,ArraySize);
result[high(result)] := copy(temp,1,pos(Delimiter,temp)-1);
System.delete(temp,1,pos(Delimiter,temp)+length(Delimiter)-1);
end;
if temp<>'' then
begin
inc(ArraySize);
setLength(result,ArraySize);
result[high(result)] := temp;
end;
end;


procedure TForm1.BitBtn3Click(Sender: TObject);
var
SplitArray:TSplitArray;
split:TSplit;
i:integer;
begin

split := TSplit.Create;
SplitArray := split.Split('I,am,a,boy!',',');
for i := low(SplitArray) to high(SplitArray) do
showmessage(SplitArray[i]);

SplitArray := split.SplitStr('I,,am,,a,,boy!',',,');
for i := low(SplitArray) to high(SplitArray) do
showmessage(SplitArray[i]);
split.Free;
end;
risingsoft 2006-06-29
  • 打赏
  • 举报
回复
很简单啊。
1、使用TStringList的功能,传入字符串和分割符,返回一个一维动态数组
2、自己编写啊。传入字符串和分割“串”,循环POS,得到一个就增加动态数组长度并写入,再删除POS位置后的分割串及以前所有字符
risingsoft 2006-06-29
  • 打赏
  • 举报
回复
明天去公司把我的CODE给你PASTE一下
whb1573 2006-06-28
  • 打赏
  • 举报
回复
var
strList:TStringList;

ExtractStrings(['|'], [], PChar(str), strList)
FigoZhu 2006-06-28
  • 打赏
  • 举报
回复
另外,还有问题就是,如果DelimitedText赋值一个不包含分隔字符的字符串,如何判断分割失败呢?
solokey 2006-06-27
  • 打赏
  • 举报
回复
function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar;
Strings: TStrings): Integer;
FigoZhu 2006-06-27
  • 打赏
  • 举报
回复
谢谢各位啦。
陈保现 2006-06-26
  • 打赏
  • 举报
回复
仁兄,还忘了释放 strs
补充liangyong007a((梦里有云,心中有天地)(探花秀))
procedure TForm1.Button5Click(Sender: TObject);
const
constr :String = '中文|english|123456||';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
try
strs.Delimiter := '|';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
finally
strs.Free;
end;
end;
liangyong007a 2006-06-26
  • 打赏
  • 举报
回复
最后多了个end; 不好意思
liangyong007a 2006-06-26
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
const
constr :String = '中文|english|123456||';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.Delimiter := '|';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
end;
liangyong007a 2006-06-26
  • 打赏
  • 举报
回复
用Tstringlist
内容概要:本文针对传统彩色数字图像加密算法存在的密钥空间有限、随机性不足及抗干扰能力弱等问题,提出一种结合混沌系统与DNA编码的复合型彩色图像加密解密方案。通过混沌系统生成伪随机序列,对图像RGB三通道像素进行置乱与混淆,并利用DNA编码规则实现信息的高维扩散与并行处理,从而提升加密强度与安全性。文章重点对该方案的抗噪声与抗裁剪性能进行了系统性分析,实验结果表明该算法具备大密钥空间、强加密随机性,且在面对高斯噪声、椒盐噪声干扰及不同程度裁剪攻击时仍能较好恢复图像内容,展现出优良的鲁棒性与实用性。; 适合人群:具备一定图像处理、密码学基础知识的科研人员及研究生,或从事信息安全、多媒体通信领域的技术人员。; 使用场景及目标:①应用于网络环境下的彩色图像安全传输与私密存储,防范信息窃取与篡改;②为高鲁棒性图像加密技术的研究提供理论支持与实验验证,推动复合加密算法在实际工程中的落地应用。; 阅读建议:建议读者结合文中提出的加密流程与实验设计,自行复现算法并对不同类型的图像数据进行测试,重点关注混沌参数敏感性、DNA编码规则选择及不同干扰场景下的解密效果,以深入理解算法的抗干扰机制与优化空间。
【不讲道理,只给数据】网上讲 JS 性能的文章大多只给结论不给数据。这个包把 8 个常见优化手法真的跑了一遍,把耗时与提速倍数写出来——包括 3 项「优化后反而更慢」的结果。 ■ 实测(本机 node 实跑,见包内 04 文件) · 按 id 查找:Map 代替 find → 680 倍 · 数组去重:Set 代替双重循环 → 90 倍 · 记忆化递归:加缓存 → 800 倍 · 深拷贝:structuredClone 反而比 JSON 慢(0.44x) · 字符串拼接:现代 V8 下 += 与 join 几乎无差别(0.9x) ■ 资源内容 · 01_优化实战/:bench.js + run_all.js,8 项 before/after 基准,可直接跑,也能改成测你自己的代码 · 02_单元测试示例/:6 个工具函数 + Node 内置测试器写的测试(零依赖,不用装 Jest) · 03_工程化配置模板/:ESLint 9 扁平配置、Prettier、Vite 手动分包、Webpack 5 持久化缓存、package.json 脚本 + 逐项说明 · 04/05 真实运行结果:程序实跑输出,非手写示例 · 06_优化清单30条.md:每条标注实测结论 · 07_自检脚本:一键重跑测试与基准 ■ 使用方法 1)只需 Node 18+,不用 npm install:node 01_优化实战/run_all.js 即可看对比表 2)单元测试:cd 02_单元测试示例 && node --test 3)用 bench.js 量你项目里最慢的函数,先记基线再动手改 4)工程化配置直接拷进项目,重点看 03 里「为什么这么配」 ■ 说明 全部代码原创,可直接用于你的项目。基准数字因 CPU 与 Node 版本略有差异,趋势一致。

16,741

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧