เรารู้ว่ามี StringTokenizer ใน Java ซึ่งสะดวกมากสำหรับการประมวลผลสตริง แต่ฟังก์ชันนี้ไม่มีใน Delphi ฉันอ้างถึงเวอร์ชัน Delphi และเวอร์ชัน C# ของภาษา Java เพื่อใช้ฟังก์ชันนี้ หวังว่าจะมอบความสะดวกสบายให้กับคุณ หวังว่าคุณจะให้คำแนะนำเพิ่มเติมแก่ฉันได้ [email protected]
หน่วย SkyStringTokenizer;
{คลาสการวิเคราะห์และประมวลผลสตริง
ผู้เขียน: เจิงชิงซ่ง
เวลา: 21/2/2547 (วันส่งท้ายปีเก่า 2546)
-
อินเตอร์เฟซ
การใช้งาน
SysUtils, คลาส;
พิมพ์
IIterator = อินเตอร์เฟส
ฟังก์ชั่น hasNext(): บูลีน;
ฟังก์ชั่นถัดไป(): สตริง;
จบ;
พิมพ์
TSkyStringTokenizer = คลาส (TComponent, IIterator)
ส่วนตัว
โทเค็น: TStringList;
ดัชนี: จำนวนเต็ม;
ข้อมูล: สตริง;
ตัวคั่น: สตริง;
ขั้นตอน init (dataLine: string; delim: string);
ฟังก์ชั่น CharacterInTokens (ch: string; const sl: TStringList): บูลีน;
ฟังก์ชั่น StringToCharArray (delim: string): TStringList;
ฟังก์ชั่น SplitString (แหล่งที่มา ch: สตริง): Tstringlist;
ได้รับการคุ้มครอง
{ ประกาศที่ได้รับการคุ้มครอง }
สาธารณะ
{ประกาศสาธารณะ}
ตัวสร้างสร้าง (dataLine: string);
ตัวสร้างสร้าง (dataLine: string; delim: string);
destructor ทำลาย();แทนที่;
ฟังก์ชั่น hasNext(): บูลีน;
ฟังก์ชั่นถัดไป(): สตริง;
ที่ตีพิมพ์
{ ประกาศที่เผยแพร่ }
จบ;
ขั้นตอนการลงทะเบียน;
การดำเนินการ
ขั้นตอนการลงทะเบียน;
เริ่ม
RegisterComponents('SkyDevKit', [TSkyStringTokenizer]);
จบ;
{ TStringTokenizer }
ฟังก์ชั่น TSkyStringTokenizer.hasNext: บูลีน;
เริ่ม
ผลลัพธ์ := (ดัชนี < tokens.Count - 1);
จบ;
ขั้นตอน TSkyStringTokenizer.init (dataLine, delim: string);
เริ่ม
โทเค็น := TStringList.Create();
ตัวคั่น := ตัวคั่น;
ข้อมูล := ดาต้าไลน์;
โทเค็น := SplitString(ข้อมูล, ตัวคั่น);
//โทเค็น := data.Split(delimiter.ToCharArray());
ดัชนี := -1;
จบ;
ฟังก์ชั่น TSkyStringTokenizer.next: string;
var
s: สตริง;
เริ่ม
inc(ดัชนี);
s := โทเค็น [ดัชนี];
ในขณะที่ ((ความยาว <= 0) และ (ดัชนี < tokens.Count)) ทำ
เริ่ม
inc(ดัชนี);
s := โทเค็น [ดัชนี];
จบ;
ผลลัพธ์ := s;
จบ;
ฟังก์ชั่น TSkyStringTokenizer.StringToCharArray (delim: string): TStringList;
var
sl: TStringList;
ฉัน: จำนวนเต็ม;
เริ่ม
sl := TStringList.Create();
สำหรับฉัน := 1 ถึง length(delim) do // Iterate
เริ่ม
sl.ผนวก(คัดลอก(delim, i, 1));
จบ; // สำหรับ
ผลลัพธ์ := sl;
จบ;
ตัวสร้าง TSkyStringTokenizer.Create (dataLine, delim: string);
เริ่ม
สืบทอดสร้าง (ไม่มี);
self.init(ดาต้าไลน์, เดลิม);
จบ;
ตัวสร้าง TSkyStringTokenizer.Create (dataLine: string);
เริ่ม
สืบทอดสร้าง (ไม่มี);
self.init(ดาต้าไลน์, ' ');
จบ;
ฟังก์ชั่น TSkyStringTokenizer.SplitString (แหล่งที่มา ch: string): tstringlist;
var
อุณหภูมิ: สตริง;
//i: จำนวนเต็ม;
sl: TStringList;
ดัชนี: จำนวนเต็ม;
เริ่ม
ถ้า ch = '' แล้ว
ช := ' ';
sl := TStringList.Create();
ผลลัพธ์ := tstringlist.Create();
sl := self.StringToCharArray(ch);
อุณหภูมิ := '';
สำหรับ Index := 1 ถึง length(source) do // Iterate
เริ่ม
ถ้าไม่ใช่ CharacterInTokens(source[index], sl) แล้ว
เริ่ม
อุณหภูมิ := อุณหภูมิ + แหล่งที่มา [ดัชนี];
จบ
อื่น
เริ่ม
ผลลัพธ์ เพิ่ม (อุณหภูมิ);
อุณหภูมิ := '';
จบ; //ถ้า
จบ; // สำหรับ
ถ้า (อุณหภูมิ <> '') แล้ว
result.Add(อุณหภูมิ);
sl.ฟรี;
จบ;
ฟังก์ชั่น TSkyStringTokenizer.CharacterInTokens(ch: string;
const sl: TStringList): บูลีน;
var
ดัชนี: จำนวนเต็ม;
// I: จำนวนเต็ม;
เริ่ม
ผลลัพธ์ := เท็จ;
สำหรับ Index := 0 ถึง sl.Count - 1 do // วนซ้ำ
เริ่ม
ผลลัพธ์ := ผลลัพธ์ หรือ (ch = sl[ดัชนี]);
{ถ้า ch = sl[ดัชนี] แล้ว
เริ่ม
ผลลัพธ์ := จริง;
หยุดพัก;
จบ;
-
จบ; // สำหรับ
จบ;
ตัวทำลาย TSkyStringTokenizer.destroy;
เริ่ม
โทเค็นฟรี;
สืบทอด;
จบ;
จบ.
//ต่อไปนี้เป็นเวอร์ชัน C# เวอร์ชันเริ่มต้นไม่ได้เขียนโดยฉัน
ใช้ระบบ;
เนมสเปซ CsharpPats
-
//คลาส String Tokenizer
StringTokenizer คลาสสาธารณะ {
ข้อมูลสตริงส่วนตัว ตัวคั่น;
โทเค็นสตริงส่วนตัว [];
ดัชนี int ส่วนตัว
StringTokenizer สาธารณะ (สตริงดาต้าไลน์) {
init(ดาต้าไลน์, " ");
-
โมฆะส่วนตัว init (String dataLine, delim สตริง) {
ตัวคั่น = ตัวคั่น;
ข้อมูล = ดาต้าไลน์;
โทเค็น = data.Split (ตัวคั่น ToCharArray() );
ดัชนี = 0;
-
StringTokenizer สาธารณะ (สตริงดาต้าไลน์, สตริงเดลิม) {
init(ดาต้าไลน์, เดลิม);
-
บูลสาธารณะ hasMoreElements() {
กลับ (ดัชนี < (โทเค็นความยาว));
-
สตริงสาธารณะ nextElement() {
string s = โทเค็น [ดัชนี ++];
ในขณะที่((s.Length <=0) && (ดัชนี<tokens.Length ))
s = โทเค็น [ดัชนี ++];
กลับ;
-
-
-