Kita tahu bahwa ada StringTokenizer di Java, yang sangat nyaman untuk pemrosesan string, tetapi fungsi ini tidak disediakan di Delphi. Saya merujuk ke versi Delphi dan versi C# bahasa Java untuk mengimplementasikan fungsi ini. Semoga dapat memberi Anda kemudahan. Semoga Anda bisa memberi saya lebih banyak nasihat. [email protected]
unit SkyStringTokenizer;
{Kelas analisis dan pemrosesan string
Penulis: Zeng Qingsong
Waktu: 21/2/2004 (Malam Tahun Baru 2003)
}
antarmuka
kegunaan
SysUtils, Kelas;
jenis
IIterator = antarmuka
fungsi hasNext(): boolean;
fungsi selanjutnya(): string;
akhir;
jenis
TSkyStringTokenizer = kelas(TComponent, IIterator)
Pribadi
token: TStringList;
indeks: bilangan bulat;
data: tali;
pembatas: tali;
procedure init(dataLine: string; delim: string);
fungsi CharacterInTokens(ch: string; const sl: TStringList): boolean;
fungsi StringToCharArray(delim: string): TStringList;
fungsi SplitString(sumber, ch: string): Tstringlist;
terlindung
{ Deklarasi yang dilindungi }
publik
{Pernyataan publik}
pembuatan konstruktor(dataLine: string kelebihan beban;
konstruktor Buat(dataLine: string; delim: string kelebihan beban;
destruktor menghancurkan();override;
fungsi hasNext(): boolean;
fungsi selanjutnya(): string;
diterbitkan
{ Deklarasi yang dipublikasikan }
akhir;
prosedur Daftar;
pelaksanaan
prosedur Daftar;
mulai
RegisterComponents('SkyDevKit', [TSkyStringTokenizer]);
akhir;
{ TStringTokenizer }
fungsi TSkyStringTokenizer.hasNext: boolean;
mulai
hasil := (indeks < tokens.Count - 1);
akhir;
prosedur TSkyStringTokenizer.init(dataLine, delim: string);
mulai
token := TStringList.Create();
pembatas := pembatas;
data := garis data;
token := SplitString(data, pembatas);
//tokens := data.Split(delimiter.ToCharArray());
indeks := -1;
akhir;
fungsi TSkyStringTokenizer.next: string;
var
s: tali;
mulai
inc(indeks);
s := token[indeks];
sementara ((panjang(s) <= 0) dan (indeks < tokens.Count)) lakukan
mulai
inc(indeks);
s := token[indeks];
akhir;
hasil := s;
akhir;
fungsi TSkyStringTokenizer.StringToCharArray(delim: string): TStringList;
var
sl: Daftar TString;
Saya: Bilangan Bulat;
mulai
sl := TStringList.Buat();
untuk I := 1 hingga panjang(batas) lakukan // Iterasi
mulai
sl.Tambahkan(salin(batasi, i, 1));
akhir; // untuk
hasil := sl;
akhir;
konstruktor TSkyStringTokenizer.Create(dataLine, delim: string);
mulai
warisan Buat(nihil);
self.init(dataLine, batasi);
akhir;
konstruktor TSkyStringTokenizer.Create(dataLine: string);
mulai
warisan Buat(nihil);
self.init(dataLine, ' ');
akhir;
fungsi TSkyStringTokenizer.SplitString(sumber, ch: string): tstringlist;
var
suhu: tali;
//i: bilangan bulat;
sl: Daftar TString;
indeks: bilangan bulat;
mulai
jika ch = '' maka
ch := ' ';
sl := TStringList.Buat();
hasil := tstringlist.Create();
sl := mandiri.StringToCharArray(ch);
suhu := '';
untuk Indeks := 1 hingga panjang(sumber) lakukan // Iterasi
mulai
jika bukan CharacterInTokens(source[index], sl) maka
mulai
suhu := suhu + sumber[Indeks];
akhir
kalau tidak
mulai
hasil.Tambahkan(temp);
suhu := '';
akhir; //jika
akhir; // untuk
jika (suhu <> '') maka
hasil.Tambahkan(temp);
sl.Gratis;
akhir;
fungsi TSkyStringTokenizer.CharacterInTokens(ch: string;
const sl: TStringList): boolean;
var
indeks: bilangan bulat;
// Saya: Bilangan Bulat;
mulai
hasil := salah;
untuk Indeks := 0 hingga sl.Hitungan - 1 lakukan // Ulangi
mulai
hasil := hasil atau (ch = sl[Indeks]);
{jika ch = sl[indeks] maka
mulai
hasil := benar;
merusak;
akhir;
}
akhir; // untuk
akhir;
destruktor TSkyStringTokenizer.destroy;
mulai
token.Gratis;
diwariskan;
akhir;
akhir.
//Berikut ini adalah versi C#, versi awal tidak saya tulis
menggunakan Sistem;
ruang nama CsharpPats
{
//Kelas Tokenizer String
kelas publik StringTokenizer {
data string pribadi, pembatas;
token string[] pribadi;
indeks int pribadi;
publik StringTokenizer(string dataLine) {
init(dataLine, " ");
}
private void init(String dataLine, string delim) {
pembatas = pembatas;
data = garis data;
token = data.Split (pembatas.ToCharArray() );
indeks = 0;
}
public StringTokenizer(string dataLine, string delim) {
init(dataLine, batasi);
}
bool publik hasMoreElements() {
return (indeks < (tokens.Panjang));
}
string publik nextElement() {
string s = token[indeks++];
while((s.Panjang <=0) && (indeks<tokens.Panjang ))
s = token[indeks++];
kembali;
}
}
}