Sabemos que existe StringTokenizer em Java, que é muito conveniente para processamento de strings, mas esta função não é fornecida em Delphi. Refiro-me à versão Delphi e à versão C# da linguagem Java para implementar esta função. Espero lhe proporcionar uma comodidade. Espero que você possa me dar mais conselhos. [email protected]
unidade SkyStringTokenizer;
{Análise de string e classe de processamento
Autor: Zeng Qingsong
Horário: 21/02/2004 (réveillon de 2003)
}
interface
usa
SysUtils, Classes;
tipo
IIterador = interface
função hasNext(): booleano;
função próxima(): string;
fim;
tipo
TSkyStringTokenizer = classe(TComponent, IIterator)
Privado
tokens: TStringList;
índice: inteiro;
dados: sequência;
delimitador: string;
procedimento init(dataLine: string; delim: string);
função CharacterInTokens (ch: string; const sl: TStringList): boolean;
função StringToCharArray(delim: string): TStringList;
função SplitString (fonte, ch: string): Tstringlist;
protegido
{Declarações protegidas}
público
{Declarações públicas}
construtor create(dataLine: string sobrecarga);
construtor Create(dataLine: string; delim: sobrecarga de string);
destruidor destroy();override;
função hasNext(): booleano;
função próxima(): string;
publicado
{Declarações publicadas}
fim;
Cadastro de procedimentos;
implementação
Cadastro de procedimentos;
começar
RegisterComponents('SkyDevKit', [TSkyStringTokenizer]);
fim;
{ TStringTokenizer }
função TSkyStringTokenizer.hasNext: booleano;
começar
resultado:= (índice <tokens.Count - 1);
fim;
procedimento TSkyStringTokenizer.init(dataLine, delim: string);
começar
tokens := TStringList.Create();
delimitador := delimitar;
dados := linha de dados;
tokens := SplitString(dados, delimitador);
//tokens := data.Split(delimiter.ToCharArray());
índice := -1;
fim;
função TSkyStringTokenizer.next: string;
var
s: corda;
começar
inc(índice);
s := tokens[índice];
while ((comprimento(s) <= 0) e (índice <tokens.Count)) faça
começar
inc(índice);
s := tokens[índice];
fim;
resultado := s;
fim;
função TSkyStringTokenizer.StringToCharArray(delim: string): TStringList;
var
sl: TStringList;
Eu: Inteiro;
começar
sl := TStringList.Create();
for I := 1 to length(delim) do // Iterar
começar
sl.Append(copiar(delim, i, 1));
fim; // para
resultado := sl;
fim;
construtor TSkyStringTokenizer.Create(dataLine, delim: string);
começar
herdado Criar(nil);
self.init(dataLine, delim);
fim;
construtor TSkyStringTokenizer.Create(dataLine: string);
começar
herdado Criar(nil);
self.init(dataLine, ' ');
fim;
função TSkyStringTokenizer.SplitString (fonte, ch: string): tstringlist;
var
temperatura: string;
//i: inteiro;
sl: TStringList;
índice: inteiro;
começar
se ch = '' então
ch := ' ';
sl := TStringList.Create();
resultado := tstringlist.Create();
sl := self.StringToCharArray(ch);
temperatura := '';
para Índice:= 1 para comprimento(fonte) do // Iterar
começar
se não CharacterInTokens(fonte[índice], sl) então
começar
temp := temp + fonte[Índice];
fim
outro
começar
resultado.Adicionar(temp);
temperatura := '';
fim; //se
fim; // para
se (temperatura <> '') então
resultado.Adicionar(temp);
sl.Grátis;
fim;
função TSkyStringTokenizer.CharacterInTokens(ch: string;
const sl: TStringList): booleano;
var
índice: inteiro;
//I: Inteiro;
começar
resultado := falso;
para Índice:= 0 para sl.Count - 1 do // Iterar
começar
resultado := resultado ou (ch = sl[Índice]);
{se ch = sl[índice] então
começar
resultado := verdadeiro;
quebrar;
fim;
}
fim; // para
fim;
destruidor TSkyStringTokenizer.destroy;
começar
tokens.Grátis;
herdado;
fim;
fim.
//A seguir está a versão C#, a versão inicial não foi escrita por mim
usando o sistema;
namespace CsharpPats
{
//Classe Tokenizador de String
classe pública StringTokenizer {
dados de string privada, delimitador;
tokens de string[] privados;
índice interno privado;
public StringTokenizer(string linha de dados) {
init(dataLine, " ");
}
private void init(String dataLine, string delim) {
delimitador = delimitar;
dados = linha de dados;
tokens = data.Split (delimitador.ToCharArray());
índice = 0;
}
public StringTokenizer(string dataLine, string delim) {
init(dataLine, delim);
}
public bool hasMoreElements() {
retornar (índice <(tokens.Length));
}
string pública nextElement() {
string s = tokens[índice++];
while((s.Length <=0) && (index<tokens.Length ))
s = tokens[índice++];
retornar;
}
}
}