Sabemos que existe StringTokenizer en Java, que es muy conveniente para el procesamiento de cadenas, pero esta función no se proporciona en Delphi. Me refiero a la versión Delphi y la versión C # del lenguaje Java para implementar esta función. Espero brindarle una comodidad. Espero que puedas darme más consejos. [email protected]
unidad SkyStringTokenizer;
{Clase de análisis y procesamiento de cadenas
Autor: Zeng Qingsong
Hora: 21/2/2004 (Nochevieja, 2003)
}
interfaz
usos
SysUtils, Clases;
tipo
IIterador = interfaz
función hasNext(): booleano;
función siguiente(): cadena;
fin;
tipo
TSkyStringTokenizer = clase(TComponent, IIterator)
Privado
tokens: TStringList;
índice: entero;
datos: cadena;
delimitador: cadena;
procedimiento init(dataLine: cadena; delim: cadena);
función CharacterInTokens(ch: cadena; const sl: TStringList): booleano;
función StringToCharArray(delim: cadena): TStringList;
función SplitString(fuente, ch: cadena): Tstringlist;
protegido
{ Declaraciones protegidas }
público
{Declaraciones públicas}
constructor crear (línea de datos: sobrecarga);
constructor Crear (línea de datos: cadena; delimitar: sobrecarga);
destructor destruir();anular;
función hasNext(): booleano;
función siguiente(): cadena;
publicado
{ Declaraciones publicadas }
fin;
Registro de trámites;
implementación
Registro de trámites;
comenzar
RegisterComponents('SkyDevKit', [TSkyStringTokenizer]);
fin;
{ TStringTokenizer }
función TSkyStringTokenizer.hasNext: booleano;
comenzar
resultado: = (índice <tokens.Count - 1);
fin;
procedimiento TSkyStringTokenizer.init(dataLine, delim: string);
comenzar
tokens := TStringList.Create();
delimitador := delimitar;
datos := línea de datos;
tokens := SplitString(datos, delimitador);
//tokens := data.Split(delimiter.ToCharArray());
índice := -1;
fin;
función TSkyStringTokenizer.next: cadena;
var
s: cadena;
comenzar
inc(índice);
s := tokens[índice];
mientras que ((longitud(es) <= 0) y (índice <tokens.Count)) lo hacen
comenzar
inc(índice);
s := tokens[índice];
fin;
resultado := s;
fin;
función TSkyStringTokenizer.StringToCharArray(delim: cadena): TStringList;
var
sl: TStringList;
I: Entero;
comenzar
sl := TStringList.Create();
para I: = 1 a longitud (delim) hacer // Iterar
comenzar
sl.Append(copiar(delim, i, 1));
fin; // para
resultado := sl;
fin;
constructor TSkyStringTokenizer.Create(dataLine, delim: string);
comenzar
heredado Crear (nulo);
self.init(línea de datos, delimitar);
fin;
constructor TSkyStringTokenizer.Create(dataLine: cadena);
comenzar
heredado Crear (nulo);
self.init(línea de datos, '');
fin;
función TSkyStringTokenizer.SplitString(fuente, canal: cadena): tstringlist;
var
temperatura: cadena;
//yo: entero;
sl: TStringList;
índice: entero;
comenzar
si ch = '' entonces
ch := ' ';
sl := TStringList.Create();
resultado := tstringlist.Create();
sl := self.StringToCharArray(ch);
temperatura := '';
para índice: = 1 a longitud (fuente) hacer // Iterar
comenzar
si no es CharacterInTokens(fuente[índice], sl) entonces
comenzar
temp := temp + fuente[Índice];
fin
demás
comenzar
resultado.Agregar(temp);
temperatura := '';
fin; //si
fin; // para
si (temperatura <> '') entonces
resultado.Agregar(temp);
sl.Gratis;
fin;
función TSkyStringTokenizer.CharacterInTokens(ch: cadena;
const sl: TStringList): booleano;
var
índice: entero;
// Yo: Entero;
comenzar
resultado: = falso;
para índice: = 0 a sl.Count - 1 hacer // Iterar
comenzar
resultado := resultado o (ch = sl[Índice]);
{si ch = sl[índice] entonces
comenzar
resultado: = verdadero;
romper;
fin;
}
fin; // para
fin;
destructor TSkyStringTokenizer.destroy;
comenzar
tokens.Gratis;
heredado;
fin;
fin.
// La siguiente es la versión de C#, la versión inicial no la escribí yo
usando Sistema;
espacio de nombres CsharpPats
{
//Clase tokenizador de cadena
clase pública StringTokenizer {
datos de cadena privada, delimitador;
tokens de cadena privada [];
índice int privado;
público StringTokenizer (cadena línea de datos) {
init(línea de datos, " ");
}
inicio vacío privado (línea de datos de cadena, delimitación de cadena) {
delimitador = delimitar;
datos = línea de datos;
tokens = datos.Split (delimitador.ToCharArray());
índice = 0;
}
público StringTokenizer (cadena línea de datos, cadena delimitada) {
init(línea de datos, delimitar);
}
public bool tieneMásElementos() {
return (índice <(tokens.Longitud));
}
cadena pública siguienteElemento() {
cadena s = tokens[índice++];
while((s.Longitud <=0) && (índice<tokens.Longitud ))
s = tokens[índice++];
devolver s;
}
}
}