如何获得指定位置之前的一个完整字符?
在一个单字节和双字节组合的字串中,如"中国1我en人民",类型为string型。现在要取第8个(是string类型的第8个)之前的1个字符(这个字符可能是单字节,也可能是双字节),如何取?
也就是说:我想取出指定位置之前的一个字符!
在一个单字节和双字节组合的字串中,如"中国1我en人民",类型为string型。现在要取第8个(是string类型的第8个)之前的1个字符(这个字符可能是单字节,也可能是双字节),如何取?
也就是说:我想取出指定位置之前的一个字符!
mbTrailByte: 汉字的第二个字节
mbSingleByte: 单个的字符,不是中文字符。
var
s:string;
i:integer;
begin
s:='中国1我en人民';
i:=pos('我',s );
case ByteType( s,i-1) of
mbSingleByte:showmessage( copy( s,i-1,1 ) );
mbLeadByte: showmessage( copy( s,i-1,2) );
mbTrailByte: showmessage( copy( s,i-2,2 ) );
end;
不过有个疑问:mbLeadByte: showmessage( copy( s,i-1,2) ); 这句是从指定位置的前一个字节开始复制,复制2字节的内容?这不是将指定位置的字节也复制了?
是不我搞错了,我想的是System.Copy?
让我看看copy的vcl源码!
case ByteType( s,i-1) of
mbSingleByte:showmessage( copy( s,i-1,1 ) );
mbLeadByte: showmessage( copy( s,i-1,2) );
mbTrailByte: showmessage( copy( s,i,2 ) );
end;
hongqi162(失踪的月亮) 的方法很不错,测试成功。
给分!