我们知道Java中有StringTokenizer,对于字符串处理都非常的方便,但是Delphi中没有提供该功能,我参考Java语言实现此功能的Delphi版本和C#版本。希望给大家提供一个方便。希望多多指教。zengqingsong@sohu.com
unit SkyStringTokenizer; {字符串分析处理类 作者:曾青松 时间:2004/2/21(2003年除夕) }
interface
uses SysUtils, Classes; type IIterator = interface function hasNext(): boolean; function next(): string; end; type TSkyStringTokenizer = class(TComponent, IIterator) private tokens: TStringList; index: integer; data: string; delimiter: string; procedure init(dataLine: string; delim: string); function CharacterInTokens(ch: string; const sl: TStringList): boolean; function StringToCharArray(delim: string): TStringList; function SplitString(source, ch: string): Tstringlist;
protected { Protected declarations } public { Public declarations } constructor create(dataLine: string); overload; constructor Create(dataLine: string; delim: string); overload; destructor destroy();override; function hasNext(): boolean; function next(): string;
published { Published declarations } end;
procedure Register;
implementation
procedure Register; begin RegisterComponents(''''SkyDevKit'''', [TSkyStringTokenizer]); end;
{ TStringTokenizer }
function TSkyStringTokenizer.hasNext: boolean; begin result := (index < tokens.Count - 1); end;
procedure TSkyStringTokenizer.init(dataLine, delim: string); begin tokens := TStringList.Create(); delimiter := delim; data := dataLine; tokens := SplitString(data, delimiter); //tokens := data.Split(delimiter.ToCharArray()); index := -1; end;
function TSkyStringTokenizer.next: string; var s: string; begin inc(index); s := tokens[index]; while ((length(s) <= 0) and (index < tokens.Count)) do begin inc(index); s := tokens[index]; end; result := s;
end;
function TSkyStringTokenizer.StringToCharArray(delim: string): TStringList; var sl: TStringList; I: Integer; begin sl := TStringList.Create(); for I := 1 to length(delim) do // Iterate begin sl.Append(copy(delim, i, 1)); end; // for result := sl; end;
constructor TSkyStringTokenizer.Create(dataLine, delim: string); begin inherited Create(nil); self.init(dataLine, delim); end;
constructor TSkyStringTokenizer.Create(dataLine: string); begin inherited Create(nil); self.init(dataLine, '''' ''''); end;
function TSkyStringTokenizer.SplitString(source, ch: string): tstringlist; var temp: string; //i: integer; sl: TStringList; index: integer; begin if ch = '''''''' then ch := '''' '''';
sl := TStringList.Create(); result := tstringlist.Create(); sl := self.StringToCharArray(ch);
temp := ''''''''; for Index := 1 to length(source) do // Iterate begin if not CharacterInTokens(source[index], sl) then begin temp := temp + source[Index]; end else begin result.Add(temp); temp := ''''''''; end; //if end; // for if (temp <> '''''''') then result.Add(temp); sl.Free; end;
function TSkyStringTokenizer.CharacterInTokens(ch: string; const sl: TStringList): boolean; var index: integer; // I: Integer; begin result := false; for Index := 0 to sl.Count - 1 do // Iterate begin result := result or (ch = sl[Index]); {if ch = sl[index] then begin result := true; break; end; } end; // for end;
destructor TSkyStringTokenizer.destroy; begin tokens.Free ; inherited; end;
end.
//下面是C#版本,最初版本不是我写的
using System;
namespace CsharpPats { //String Tokenizer class public class StringTokenizer { private string data, delimiter; private string[] tokens; private int index; public StringTokenizer(string dataLine) { init(dataLine, " "); } private void init(String dataLine, string delim) { delimiter = delim; data = dataLine; tokens = data.Split (delimiter.ToCharArray() ); index = 0; } public StringTokenizer(string dataLine, string delim) { init(dataLine, delim); } public bool hasMoreElements() { return (index < (tokens.Length)); } public string nextElement() { string s = tokens[index++]; while((s.Length <=0) && (index<tokens.Length )) s = tokens[index++]; return s; } } }
[VB.NET程序]VB.NET中实现IEnumerator接口 [VB.NET程序]在VB中实现PickList功能 [Delphi程序]用API函数在DELPHI中实现“非典型”窗体 [VB.NET程序]MCI播放器在VB中实现 [网页制作]DW中实现flash的透明背景 [网页制作]Dreamweaver中实现flash的透明背景 [Web开发]ASP.NET 中实现 MD5_HMAC(C#) [Web开发]在ASP 中实现ASP.Net 的DataGrid 功能(转载) [Web开发]在ASP.NET中实现MVC模式(五) [Web开发]在ASP.NET中实现MVC模式(四)
|