ในส่วนก่อนหน้านี้ เราได้เรียนรู้วิธีใช้เมธอด split() ของคลาส String เพื่อแยกย่อยสตริง ในส่วนนี้ เราจะได้เรียนรู้วิธีใช้ อ็อบเจ็กต์ StringTokenizer เพื่อแยกย่อยสตริง ต่างจากเมธอด split() ไม่ใช้นิพจน์ทั่วไปเป็นเครื่องหมายคั่น
ก่อนอื่นเราต้องรู้แนวคิด - สัญลักษณ์ภาษา . สิ่งที่เรียกว่าสัญลักษณ์ภาษาหมายความว่าเมื่อเราวิเคราะห์สตริงเราจะแยกย่อยสตริงเป็นคำที่สามารถใช้ได้อย่างอิสระและคำเหล่านี้เรียกว่าสัญลักษณ์ภาษา
ตัวอย่างเช่น สำหรับสตริง เรายินดีต้อนรับ หากมีการใช้ช่องว่างเป็นเครื่องหมายกำหนดขอบเขตของสตริง สตริงนั้นจะมีคำสามคำ นั่นคือ สัญลักษณ์ภาษาสามตัว สำหรับสตริง ยินดีต้อนรับ หากใช้ลูกน้ำเป็นเครื่องหมายคั่นของสตริง สตริงนั้นก็จะมีสัญลักษณ์ภาษาสามสัญลักษณ์ด้วย
เมื่อเราวิเคราะห์สตริงและแยกสตริงออกเป็นคำที่สามารถใช้งานได้อย่างอิสระ เราสามารถใช้คลาส StringTokenizer ในแพ็คเกจ java.util ซึ่งมีคอนสตรัคเตอร์ที่ใช้กันทั่วไปสองตัว:
สร้าง parser สำหรับสตริง s โดยใช้เครื่องหมายตัวคั่น ดีฟอลต์ นั่นคือ อักขระช่องว่าง (หลายช่องว่างถือเป็นช่องว่างเดียว) อักขระป้อนบรรทัด อักขระขึ้นบรรทัดใหม่ อักขระแท็บ และอักขระฟีดเป็นเครื่องหมายแยก
สร้าง parser สำหรับสตริง s อักขระในพารามิเตอร์ delim ใช้เป็นตัวคั่น
หมายเหตุ : การใช้ตัวคั่นใด ๆ รวมกันยังคงเป็นตัวคั่น
ตัวอย่างเช่น:
StringTokenizerfenxi=newStringTokenizer(คุณยินดี);StringTokenizerfenxi=newStringTokenizer(คุณ ยินดีต้อนรับ ,,;);
เรียกออบเจ็กต์ StringTokenizer ตัววิเคราะห์สตริง ตัววิเคราะห์สามารถใช้เมธอด nextToken() เพื่อรับสัญลักษณ์ภาษาในสตริงทีละรายการ เมื่อใดก็ตามที่มีการเรียก nextToken() สัญลักษณ์ภาษาถัดไปจะได้รับในแต่ละครั้งเมื่อใด เมื่อได้รับสัญลักษณ์ภาษา ค่าของตัวแปรการนับในตัววิเคราะห์สตริงจะลดลง 1 โดยอัตโนมัติ ค่าเริ่มต้นของตัวแปรการนับจะเท่ากับจำนวนคำในสตริง
โดยปกติแล้ว การวนซ้ำ while จะใช้เพื่อรับสัญลักษณ์ภาษาทีละรายการ เพื่อควบคุมการวนซ้ำ คุณสามารถใช้เมธอด hasMoreTokens() ในคลาส StringTokenizer ตราบใดที่มีสัญลักษณ์ภาษาในสตริง นั่นคือค่า ของตัวแปรนับมากกว่า 0 เมธอดนี้จะคืนค่าเป็นจริง มิฉะนั้นจะส่งคืนค่าเท็จ นอกจากนี้ คุณยังสามารถให้เครื่องวิเคราะห์เรียกใช้เมธอด countTokens() ได้ตลอดเวลาเพื่อรับค่าของตัวแปรการนับในตัววิเคราะห์
ตัวอย่างเช่น:
importjava.util.*;publicclassMain{publicstaticvoidmain(Stringargs[]){Strings=welcometodotcpp(ขอบคุณ),nicetomeetyou;StringTokenizerfenxi=newStringTokenizer(s,(),);intnumber=fenxi.countTokens();ในขณะที่(fenxi.hasMoreTokens() ){Stringstr=fenxi.nextToken();System.out.print(str+);}System.out.println(จำนวนคำทั้งหมด: +number+);}}
ผลการวิ่งมีดังนี้:
ยินดีต้อนรับtodotcppขอบคุณที่ดีพบกับคุณทั้งหมด: 9