如何处理这个含有中文的字符串(50)

  • 主题发起人 主题发起人 liuhui_sky
  • 开始时间 开始时间
L

liuhui_sky

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做这样一个功能,例如有一个字符串1111,bbbbb,中文字符,33333,33333如果是全英文的我可以正确的读取每个用逗号分割的字符串,但是一旦有中文就不正确了,请问如何才能正确的读出每个逗号分割的字符串呢,最好能给我个例子,谢谢先。
 
楼主,应该可以的 你先转化为widestring; 然后试试看看注意你的,是全角还是半角!
 
// 判断字符 s 的第一位 是否为多字节字符的一部分(中文, 日文, 韩文等)Result := (ByteType(s, 1) <> mbSingleByte);
 
好像不必要转化为 widestring,下面的测试通过procedure TForm1.btn1Click(Sender: TObject); function spliteString(aString: string;split:string;idx:integer ):string ;//不想调用 tstringlist ,否则程序又大了几十K,//不过,你可以把它们加上 var //Str:String; //ResultList:TStringList; I:Integer;begin Result:=''; i:=1; while pos(split, aString)>0 do begin Result:=copy(aString, 1, pos(split, aString)-1); aString:=copy(aString, pos(split, aString)+1, length(aString)-pos(split, aString)); if idx=i then exit; Inc(i); end; Result:=aString; end;var s:string;i:integer;begin s:='1111,bbbbb,中文字符,33333,33333' ; for i:=1 to 5 do showmessage(spliteString(s,',',i));end;
 
用StringReplace先把所有的中文逗号(,)更改为英文逗号(,),然后再执行你原先的代码就可以了。
 
你用这个方法var w:widestring;i:integer;m:string;begin w:= '1111,bbbbb,中文字符,33333,33333' ;for i:= 1 to length(w) dobegin m:=w; if length(m)= 2 then//汉字字符长度是2 ,别的是1 ......end;end;
 
方法1: 分割符自己设定Classes.ExtractStrings()方法2: 分割符只能是 ','var list: TStringList; s: string;begin s := '1111,bbbbb,中文字符,33333,33333'; list := TStringList.Create; try list.Delimiter := ','; list.DelimitedText := s; finally list.Free; end;end;
 
后退
顶部