نحن نعلم أن هناك StringTokenizer في Java، وهو مناسب جدًا لمعالجة السلسلة، ولكن هذه الوظيفة غير متوفرة في دلفي، وأشير إلى إصدار Delphi وإصدار C# من لغة Java لتنفيذ هذه الوظيفة. نأمل أن توفر لك الراحة. آمل أن تتمكن من إعطائي المزيد من النصائح. [email protected]
وحدة SkyStringTokenizer؛
{تحليل السلسلة وفئة المعالجة
المؤلف: تسنغ تشينغ سونغ
الزمان: 2004/2/21 (ليلة رأس السنة 2003)
}
واجهة
الاستخدامات
سيسوتيلس، فئات؛
يكتب
IIterator = الواجهة
الوظيفة hasNext(): boolean;
الوظيفة التالية (): سلسلة؛
نهاية؛
يكتب
TSkyStringTokenizer = فئة (TComponent، IIterator)
خاص
الرموز: TStringList؛
الفهرس: عدد صحيح؛
البيانات: سلسلة؛
محدد: سلسلة؛
الإجراء init(dataLine: string; delim: string);
وظيفة CharacterInTokens(ch: string; const sl: TStringList): boolean;
الدالة StringToCharArray(delim: string): TStringList;
وظيفة SplitString(source, ch: string): Tstringlist;
محمي
{ التصريحات المحمية }
عام
{التصريحات العامة}
إنشاء المنشئ (dataLine: سلسلة)؛
إنشاء المُنشئ (dataLine: string؛ delim: string)؛
تدمير المدمر ()؛ تجاوز؛
الوظيفة hasNext(): boolean;
الوظيفة التالية (): سلسلة؛
نشرت
{ التصريحات المنشورة }
نهاية؛
سجل الإجراء؛
تطبيق
سجل الإجراء؛
يبدأ
RegisterComponents('SkyDevKit', [TSkyStringTokenizer]);
نهاية؛
{ TStringTokenizer }
الدالة TSkyStringTokenizer.hasNext: منطقية؛
يبدأ
النتيجة := (الفهرس < tokens.Count - 1);
نهاية؛
الإجراء TSkyStringTokenizer.init(dataLine, delim: string);
يبدأ
الرموز := TStringList.Create();
المحدد := delim;
البيانات := خط البيانات؛
الرموز المميزة := SplitString(data, delimiter);
//الرموز := data.Split(delimiter.ToCharArray());
الفهرس := -1;
نهاية؛
الدالة TSkyStringTokenizer.next: سلسلة؛
فار
ق: سلسلة؛
يبدأ
المؤتمر الوطني العراقي (الفهرس)؛
s := الرموز المميزة[index];
بينما ((الطول (الأطوال) <= 0) و (الفهرس < tokens.Count)) يفعلان ذلك
يبدأ
المؤتمر الوطني العراقي (الفهرس)؛
s := الرموز المميزة[index];
نهاية؛
النتيجة := س؛
نهاية؛
الدالة TSkyStringTokenizer.StringToCharArray(delim: string): TStringList;
فار
sl: TStringList؛
أنا: عدد صحيح؛
يبدأ
sl := TStringList.Create();
for I := 1 to length(delim) do // تكرار
يبدأ
sl.Append(copy(delim, i, 1));
نهاية؛ // ل
النتيجة := س.
نهاية؛
المُنشئ TSkyStringTokenizer.Create(dataLine, delim: string);
يبدأ
ورثت إنشاء (لا شيء) ؛
self.init(dataLine, delim);
نهاية؛
المُنشئ TSkyStringTokenizer.Create(dataLine: string);
يبدأ
ورثت إنشاء (لا شيء) ؛
self.init(dataLine, ' ');
نهاية؛
وظيفة TSkyStringTokenizer.SplitString (المصدر، ch: سلسلة): tstringlist؛
فار
درجة الحرارة: سلسلة؛
//أنا: عدد صحيح؛
sl: TStringList؛
الفهرس: عدد صحيح؛
يبدأ
إذا الفصل = '' ثم
الفصل := ' ';
sl := TStringList.Create();
النتيجة := tstringlist.Create();
sl := self.StringToCharArray(ch);
درجة الحرارة := '';
للفهرس: = 1 إلى الطول (المصدر) do // تكرار
يبدأ
إذا لم يكن CharacterInTokens(source[index], sl) إذن
يبدأ
درجة الحرارة := درجة الحرارة + المصدر[الفهرس]؛
نهاية
آخر
يبدأ
result.Add(temp);
درجة الحرارة := '';
نهاية؛ //إذا
نهاية؛ // ل
إذا (درجة الحرارة <> '') إذن
result.Add(temp);
sl.Free;
نهاية؛
الدالة TSkyStringTokenizer.CharacterInTokens(ch: string;
const sl: TStringList): منطقي؛
فار
الفهرس: عدد صحيح؛
// أنا: عدد صحيح؛
يبدأ
النتيجة := خطأ؛
للفهرس: = 0 إلى sl.Count - 1 do // تكرار
يبدأ
النتيجة := النتيجة أو (ch = sl[Index]);
{إذا كان الفصل = sl[index] ثم
يبدأ
النتيجة :=صحيح؛
استراحة؛
نهاية؛
}
نهاية؛ // ل
نهاية؛
destructor TSkyStringTokenizer.destroy;
يبدأ
tokens.Free;
موروث؛
نهاية؛
نهاية.
// فيما يلي إصدار C#، الإصدار الأولي لم أكتبه بواسطتي
باستخدام النظام؛
مساحة الاسم CsharpPats
{
// فئة رمز السلسلة
الطبقة العامة StringTokenizer {
بيانات سلسلة خاصة، محدد؛
الرموز الخاصة بسلسلة []؛
مؤشر كثافة العمليات الخاصة؛
StringTokenizer العامة (سلسلة بيانات الخط) {
init(dataLine, " ");
}
init باطلة خاصة (سلسلة بيانات، سلسلة delim) {
محدد = ديليم؛
البيانات = خط البيانات؛
الرموز = data.Split (delimiter.ToCharArray() );
الفهرس = 0؛
}
public StringTokenizer(string dataLine, string delim) {
init(dataLine, delim);
}
المنطق العام لديهMoreElements() {
العودة (الفهرس < (الرموز المميزة. الطول))؛
}
السلسلة العامة nextElement() {
string s = tokens[index++];
while((s.Length <=0) && (index<tokens.Length ))
s = الرموز المميزة[index++];
العودة ق.
}
}
}