如何截取指定长度的中英文混合字符串,且中文不破截断?

gdufo 2007-03-21 09:05:37
截取指定长度的中英文混合字符串,且中文不破截断?

如:
string str1 = "中国人ABC";
string str2 = "AB中国人C~"

截取7位时最终显示

str1="中国人A"//7位,这种情况正好!
str2="AB中国"//6位,宁可少一个字符也不要将最后一个汉字截破

请问有什么办法?



...全文
266 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
用widestring不就完了
gdufo 2007-03-21
  • 打赏
  • 举报
回复
谢谢!
madyak 2007-03-21
  • 打赏
  • 举报
回复
可以用WideString代替string这样英文还汉字就统一了。
jadeluo 2007-03-21
  • 打赏
  • 举报
回复
function LeftString(sData: String; iLen: Integer; iMode: Integer = 0): String;
//入口参数:
// sData - 字符串
// iLen - 取出的字节数
// iMode - 遇到取出的最后一个字节是半个汉字时的处理方式
// 0-取半个汉字(默认), 1-丢弃半个汉字, 2-取完整的汉字
var
bChinesePrev: Boolean;
iLoop : Integer;
begin
bChinesePrev := False;
If iLen < Length(sData) + 1 Then
for iLoop := 1 to iLen do
if ord(sData[iLoop]) >= 160 then bChinesePrev := not bChinesePrev;
If bChinesePrev Then
Case iMode of
0 : Result := Copy(sData, 1, iLen);
1 : Result := Copy(sData, 1, iLen - 1);
2 : Result := Copy(sData, 1, iLen + 1);
end
else
Result := Copy(sData, 1, iLen);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage (LeftString('AB中国人', 6) + '!!!');
ShowMessage (LeftString('AB中国人', 7) + '!!!');
ShowMessage (LeftString('AB中国人', 7, 1) + '!!!');
ShowMessage (LeftString('AB中国人', 7, 2) + '!!!');
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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