截取指定长度的中英文混合字符串,且中文不破截断?如:
string str1 = "中国人ABC";
string str2 = "AB中国人C~"截取7位时最终显示str1="中国人A"//7位,这种情况正好!
str2="AB中国"//6位,宁可少一个字符也不要将最后一个汉字截破请问有什么办法?

解决方案 »

  1.   

    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;
      

  2.   

    可以用WideString代替string这样英文还汉字就统一了。