如何判断中英文都有的字符串中最后一位是否是中文,以及相应位数的取值问题。 ( 积分: 100 )

  • 主题发起人 主题发起人 ray_shan
  • 开始时间 开始时间
R

ray_shan

Unregistered / Unconfirmed
GUEST, unregistred user!
我有个字符串里面是中英文还有数字混合的,我现在要每行要取25位把它放到Memo中。<br>我们都知道在程序中英文为一位,字符占两位。<br>&nbsp;&nbsp;&nbsp;&nbsp;比如说这个字符串有24个英文字母和一个中文汉字组成,那他的位数为26位,但是我要是取25个字符长度的话,这样字符只取了一半,显示为乱码。<br>&nbsp;&nbsp;&nbsp;&nbsp;我想判断这个字符串最后一位为中文的话,判断加上前面的字符串是不是超过了25,如果超过了,这个中文就放在下一行取值。<br>&nbsp;&nbsp;&nbsp;&nbsp;我想问下这个该怎们写。如果有更好的方法也可以提出来,最好能给上源代码。<br><br>下面是我程式的源码:<br><br>SHIPADDRESS&nbsp;&nbsp;是字符串<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frm_printer.Memo1.Lines.Add(Copy(SHIPADDRESS,1,25));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frm_printer.Memo1.Lines.Add(Copy(SHIPADDRESS,26,25));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frm_printer.Memo1.Lines.Add(Copy(SHIPADDRESS,51,25))&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frm_printer.Memo1.Lines.Add(Copy(SHIPADDRESS,76,25));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frm_printer.Memo1.Lines.Add(Copy(SHIPADDRESS,101,25));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frm_printer.Memo1.Lines.Add(Copy(SHIPADDRESS,126,25));
 
function&nbsp;IsMBCSChar(const&nbsp;ch:&nbsp;Char):&nbsp;Boolean;&nbsp;<br>begin&nbsp;<br>Result&nbsp;:=&nbsp;(ByteType(ch,&nbsp;1)&nbsp;&lt;&gt;&nbsp;mbSingleByte);&nbsp;<br>end;<br><br>判断
 
var<br>&nbsp;&nbsp;s:&nbsp;string;<br>begin<br>&nbsp;&nbsp;s&nbsp;:=&nbsp;copy('ab中',&nbsp;2,&nbsp;1);<br>&nbsp;&nbsp;if&nbsp;Windows.IsDBCSLeadByte(byte(s[1]))&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;showmessage('是汉字')<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;showmessage(s);&nbsp;//'b'<br><br>&nbsp;&nbsp;s&nbsp;:=&nbsp;copy('ab中',&nbsp;3,&nbsp;1);<br>&nbsp;&nbsp;if&nbsp;Windows.IsDBCSLeadByte(byte(s[1]))&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;showmessage('是汉字')&nbsp;//<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;showmessage(s);<br>end;
 
你不要用字符串地址来访问,直接用字符串访问,字符串兼容unicode&nbsp;1就是一个字符,而不管是汉字还是英文,不就达到你的要求了吗?
 
现在判断出汉字还有一个问题了,比如说这个字符串有24个英文字母和一个中文汉字组成,那他的位数为26位,但是我要是取25个字符长度的话,这样字符只取了一半,显示为乱码。<br>现在假设已经能够判断出最后一位为汉字,有两种情况,<br>1&nbsp;是这个汉字占的位数为24和25。这种情况是可以的。<br>2&nbsp;如果这个汉字占的位数为25和26时这种情况时,截取25位时就会出现乱码。现在就是要把这种情况判断出。是要将取得位数减为24就可以了。汉字占的位数为25和26时这种情况判断第25位也是汉字,怎样和是这个汉字占的位数为24和25情况区分开来啊?这种情况该如何判断啊?<br>急啊!先谢了!
 
ByteType函数,自己去查帮助,一楼二楼的答案都可以。至于你说的怎么区分24和25,那完全不是问题,ByteType函数就可以按位检测。你只要找到mbLeadByte就回缩一位拷贝就可以了。没你说的那么复杂。
 

Similar threads

回复
0
查看
1K
不得闲
回复
0
查看
804
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部