unit skystringtokenizer;
{字符串分析处理类
}
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;
}
}
}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器