在Delphi中实现StringTokenizer功能模块
2008-04-09 04:26:03来源:互联网 阅读 ()
我们知道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;
}
}
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:压缩图像文件并转换成BMP格式
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash