Nous savons qu'il existe StringTokenizer en Java, ce qui est très pratique pour le traitement des chaînes, mais cette fonction n'est pas fournie dans Delphi, je me réfère à la version Delphi et à la version C# du langage Java pour implémenter cette fonction. J'espère vous offrir une commodité. J'espère que vous pourrez me donner plus de conseils. [email protected]
unité SkyStringTokenizer ;
{Classe d'analyse et de traitement de chaînes
Auteur : Zeng Qingsong
Heure : 21/02/2004 (réveillon du Nouvel An 2003)
}
interface
utilise
SysUtils, Classes ;
taper
IIérateur = interface
fonction hasNext() : booléen ;
fonction next() : chaîne ;
fin;
taper
TSkyStringTokenizer = classe (TComponent, IIterator)
Privé
jetons : TStringList ;
indice : entier ;
données : chaîne ;
délimiteur : chaîne ;
procédure init(dataLine : chaîne ; delim : chaîne) ;
function CharacterInTokens(ch: string; const sl: TStringList): booléen;
fonction StringToCharArray(delim: string): TStringList;
fonction SplitString(source, ch:string): Tstringlist;
protégé
{ Déclarations protégées }
publique
{Déclarations publiques}
constructeur create(dataLine: surcharge de chaîne);
constructeur Create(dataLine: string; delim: string surcharge);
destructeur destroy();override;
fonction hasNext() : booléen ;
fonction next() : chaîne ;
publié
{ Déclarations publiées }
fin;
registre de procédure ;
mise en œuvre
registre de procédure ;
commencer
RegisterComponents('SkyDevKit', [TSkyStringTokenizer]);
fin;
{ TStringTokenizer }
fonction TSkyStringTokenizer.hasNext : booléen ;
commencer
result := (index < tokens.Count - 1);
fin;
procédure TSkyStringTokenizer.init(dataLine, delim: string);
commencer
jetons := TStringList.Create();
délimiteur := délimiteur;
données := ligne de données ;
jetons := SplitString(données, délimiteur);
//jetons := data.Split(delimiter.ToCharArray());
indice := -1;
fin;
fonction TSkyStringTokenizer.next : chaîne ;
var
s : chaîne ;
commencer
inc(index);
s := jetons[index];
tandis que ((length(s) <= 0) et (index < tokens.Count)) font
commencer
inc(index);
s := jetons[index];
fin;
résultat := s;
fin;
fonction TSkyStringTokenizer.StringToCharArray(delim : string) : TStringList ;
var
sl : TStringList ;
I : Entier ;
commencer
sl := TStringList.Create();
pour I := 1 à length(delim) do // Itérer
commencer
sl.Append(copie(delim, i, 1));
fin ; // pour
résultat := sl;
fin;
constructeur TSkyStringTokenizer.Create(dataLine, delim: string);
commencer
hérité Create(nil);
self.init(dataLine, delim);
fin;
constructeur TSkyStringTokenizer.Create(dataLine: string);
commencer
hérité Create(nil);
self.init(dataLine, ' ');
fin;
fonction TSkyStringTokenizer.SplitString(source, ch: string): tstringlist;
var
temp : chaîne ;
//i : entier ;
sl : TStringList ;
indice : entier ;
commencer
si ch = '' alors
ch := ' ';
sl := TStringList.Create();
résultat := tstringlist.Create();
sl := self.StringToCharArray(ch);
temp := '';
pour Index := 1 à length(source) faire // Itérer
commencer
sinon CharacterInTokens (source [index], sl) alors
commencer
temp := temp + source[Index];
fin
autre
commencer
result.Add(temp);
temp := '';
fin ; //si
fin ; // pour
si (temp <> '') alors
result.Add(temp);
sl.Gratuit ;
fin;
function TSkyStringTokenizer.CharacterInTokens(ch: string;
const sl : TStringList) : booléen ;
var
indice : entier ;
// I : Entier ;
commencer
résultat := faux;
pour Index := 0 à sl.Count - 1 do // Itérer
commencer
résultat := résultat ou (ch = sl[Index]);
{si ch = sl[index] alors
commencer
résultat := vrai;
casser;
fin;
}
fin ; // pour
fin;
destructeur TSkyStringTokenizer.destroy ;
commencer
jetons.Gratuit ;
hérité;
fin;
fin.
//Ce qui suit est la version C#, la version initiale n'a pas été écrite par moi
utiliser le système ;
espace de noms CsharpPats
{
//Classe de tokeniseur de chaînes
classe publique StringTokenizer {
données de chaîne privées, délimiteur ;
jetons de chaîne privée[] ;
index int privé ;
public StringTokenizer (chaîne dataLine) {
init(ligne de données, " );
}
private void init (String dataLine, string delim) {
délimiteur = délimiteur ;
données = ligne de données ;
jetons = data.Split (delimiter.ToCharArray() );
indice = 0 ;
}
public StringTokenizer (string dataLine, string delim) {
init (ligne de données, délim);
}
public bool hasMoreElements() {
return (index < (tokens.Length));
}
chaîne publique nextElement() {
chaîne s = jetons[index++];
while((s.Length <=0) && (index<tokens.Length ))
s = jetons[index++];
retourner s ;
}
}
}