中文字符串查找问题 testStr:='D:\ProgramFiles\测试.txt';temp:='测试.txt';在delphi中如何判断testStr中是否存在子字符串temp?各位谁有比较完善的中文字符串查找或者截取代码,拿出来分享一下,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我测试了下,没问题。不过Pos不分字符或字符串吗? 还真的可以哦,学习了var a:string; b:string; i:integer;begin a := '测试'; b := '测试字符串'; i := Pos(a,b); if i>0 then showmessage('fdasfdas');end;、、这是我的测试程序,没有想到中文 也行唉。。 用Pos函数在含有中文的字符串中寻找子串还是可能会出现问题的, 比如下面这样:ShowMessage(IntToStr(Pos('馐', '测试')));显示的结果是2, 不是0 出现类似错误判断的例子还会有很多, 比如这样:if Pos('址', '测试字符串') > 0 then ShowMessage('!!!!!!'); a: widestring;b: widestring;if Pos(a, b) > 0 then ShowMessage('!!!!!!');这个还出现问题么? 我不是说了:var a,b: WideString;begin a :='址'; b := '测试字符串'; if Pos(a,b ) > 0 then ShowMessage('!!!!!!');end; 9楼是正确的!因为Pos的两个参数是字符型的,而字符型数据有两大类(不考虑PChar等类型),一类是标准ASCII的String类型,一类是双字节的WideString类型,当两个参数是String类型的时候,它是根据字节进行比较,所以有可能发生待搜索字符串(包括字符)正好是从一个字符的中间字节开始能够匹配的情况,这种情况不能算是Pos函数判断错误,而应该属于使用错误。当两个参数是WideString类型的时候,它不会将两个字节的中文从中间截断进行匹配的情况,所以这种情况下是正确的。 Delphi中代码编辑窗口最下面的信息提示窗口(Messages)是由什么组件构成的? delphi哪个压缩组件比较好? 单位要开发一个WEB站点,该用什么工具开发好. 救急!在线等待!StringGrid控件的事件问题! 请问高手delphi 怎样复制记录集 问题呀 delphi7怎么设置其快捷键 现场求助,再问“万王之王”关于过滤器能否更详尽 Delphi依时利二次开发,读卡基本信息失败! 关于sql数据库复制的问题 想实现在 cxGrid 中,能够动态控制列是否显示,代码有点问题 我用Ehlib4.14,出现这样子错误?高手指点一下。
我测试了下,没问题。不过Pos不分字符或字符串吗?
a:string;
b:string;
i:integer;begin
a := '测试';
b := '测试字符串';
i := Pos(a,b);
if i>0 then
showmessage('fdasfdas');
end;
、、这是我的测试程序,
没有想到中文 也行唉。。
a: widestring;
b: widestring;if Pos(a, b) > 0 then ShowMessage('!!!!!!');这个还出现问题么?
var
a,b: WideString;
begin
a :='址';
b := '测试字符串';
if Pos(a,b ) > 0 then ShowMessage('!!!!!!');
end;
因为Pos的两个参数是字符型的,而字符型数据有两大类(不考虑PChar等类型),一类是标准ASCII的String类型,一类是双字节的WideString类型,
当两个参数是String类型的时候,它是根据字节进行比较,所以有可能发生待搜索字符串(包括字符)正好是从一个字符的中间字节开始能够匹配的情况,这种情况不能算是Pos函数判断错误,而应该属于使用错误。
当两个参数是WideString类型的时候,它不会将两个字节的中文从中间截断进行匹配的情况,所以这种情况下是正确的。