หากต้องการใช้คลาส Scanner จะต้องนำเข้าก่อน หลังจากนั้น วัตถุจะต้องสร้างอินสแตนซ์จากวัตถุนั้น หลังจากใช้วัตถุ Scanner จะต้องปิด ออบเจ็กต์สตรีมอินพุตที่แสดงถึงแป้นพิมพ์คือ System.in สแกนเนอร์มีหลายวิธี บทความนี้จะอธิบายเฉพาะที่ใช้กันทั่วไปเท่านั้น
เนื้อหาบทความ
- การใช้งาน Scanner Class อย่างง่าย
- แยกบรรทัดอินพุตออกเป็นค่า
- การอ่านและตรวจสอบประเภทข้อมูลดั้งเดิม
- การกำหนด Input Token ให้กับ Variable
- บทสรุป
การใช้งาน Scanner Class อย่างง่าย
รหัสต่อไปนี้ขอให้ผู้ใช้พิมพ์ประโยค แล้วแสดงประโยคนั้น:
นำเข้า java.util.Scanner;
สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
ระบบ .ออก.println('พิมพ์ประโยคแล้วกด Enter:');
สตริง ประโยค=scanObj.ต่อไปบรรทัด();
ระบบ .ออก.println(ประโยค);
scanObj.ปิด();
}
}
บรรทัดแรกนำเข้าคลาส Scanner ในฟังก์ชันหลัก บรรทัดแรกจะสร้างวัตถุสแกนเนอร์โดยใช้วัตถุ System.in สำหรับแป้นพิมพ์ ทันทีที่สร้างออบเจ็กต์เครื่องสแกน วัตถุจะเริ่มรอการป้อนข้อมูล บรรทัดถัดไปพิมพ์คำสั่ง โดยขอให้ผู้ใช้พิมพ์ประโยค บรรทัดที่ตามมาในโค้ดใช้เมธอด nextLine() ของออบเจกต์เครื่องสแกนเพื่ออ่านประโยคของผู้ใช้หลังจากที่เขากด Enter บรรทัดหลังจากนั้น ในโค้ด พิมพ์ประโยคซ้ำที่หน้าต่างเทอร์มินัล บรรทัดสุดท้ายปิดวัตถุสแกนเนอร์
แยกบรรทัดอินพุตออกเป็นค่า
รหัสต่อไปนี้แยกบรรทัดอินพุตเป็นคำ (โทเค็น) โดยใช้ช่องว่างเป็นตัวคั่น:
นำเข้า java.util.Scanner;สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
ระบบ .ออก.println('พิมพ์บรรทัดของโทเค็น และกด Enter:');
ในขณะที่(scanObj.hasNext()){
ระบบ .ออก.println(scanObj.ต่อไป());
}
scanObj.ปิด();
}
}
hasNext() และ next() เป็นอีกสองวิธีของวัตถุสแกนเนอร์ เมื่อวัตถุสแกนเนอร์อ่านบรรทัด มันจะเก็บไว้ next() เข้าถึงโทเค็นถัดไป (word) hasNext() คืนค่า จริง หากมีโทเค็นอื่นที่ยังไม่ได้เข้าถึง
น่าเสียดายที่ผู้ใช้ยังคงต้องพิมพ์อินพุตเพื่อแยกและแสดงซ้ำด้วยรหัสนี้ หากต้องการจบทั้งหมด ให้กด Ctrl+z และคุณควรกลับมาที่พรอมต์คำสั่ง
ในโค้ดด้านบน ตัวคั่นจะแยกโทเค็นในช่องว่าง สามารถใช้อักขระอื่นได้ รหัสต่อไปนี้ใช้เครื่องหมายจุลภาค อย่าลืมกด Ctrl+z เพื่อสิ้นสุดการวนซ้ำหากคุณทดสอบโค้ด
นำเข้า java.util.Scanner;สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
ระบบ .ออก.println('พิมพ์บรรทัดของโทเค็น และกด Enter:');
scanObj.ใช้ตัวคั่น(',');
ในขณะที่(scanObj.hasNext()){
ระบบ .ออก.println(scanObj.ต่อไป());
}
scanObj.ปิด();
}
}
หากคุณทดสอบโค้ด คุณจะสังเกตเห็นว่ามีการเว้นวรรคในโทเค็นเป็นส่วนหนึ่งของโทเค็น (เอาต์พุต) นิพจน์ scanObj.useDelimiter(,); พิมพ์หลังจากอ่านบรรทัดอินพุตแล้ว มันคือสิ่งที่ทำให้จุลภาคเป็นตัวคั่น
การอ่านและตรวจสอบประเภทข้อมูลดั้งเดิม
nextBoolean() method
ในโค้ดต่อไปนี้ ผู้ใช้ต้องพิมพ์ true หรือ false โดยไม่ต้องใส่เครื่องหมายคำพูด จากนั้นกดปุ่ม Enter หากผู้ใช้พิมพ์อย่างอื่น เช่น ใช่ หรือ ไม่ใช่ ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น
นำเข้า java.util.Scanner;สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
ระบบ .ออก.พิมพ์('คุณอายุเกิน 24 หรือเปล่า? ');
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
บูลีนบลู=scanObj.ต่อไปบูลีน();
ถ้า (บลู== จริง) {
ระบบ .ออก.println('คุณอายุเกิน 24');
}
อื่น ถ้า (บลู== เท็จ) {
ระบบ .ออก.println('คุณอายุต่ำกว่า 24');
}
scanObj.ปิด();
}
}
เนื่องจากจาวาจะออกข้อความแสดงข้อผิดพลาดตราบใดที่อินพุตไม่เป็นความจริงหรือเท็จทั้งหมด อย่างอื่นหากถูกใช้แทนอย่างอื่น
ความแตกต่างระหว่างวิธีการ print และ println คือ print คาดหวังอินพุตในบรรทัดปัจจุบัน ในขณะที่ println คาดหวังอินพุตในบรรทัดถัดไป
nextByte() เมธอด
ด้วยชุดอักขระ ASCII อักขระหนึ่งไบต์ อย่างไรก็ตาม สำหรับชุดอักขระตะวันออกบางชุด อักขระอาจประกอบด้วยมากกว่าหนึ่งไบต์ โดยไม่ขึ้นกับชุดอักขระ วิธี nextByte จะอ่านและตรวจสอบความถูกต้องของไบต์ถัดไปของอินพุต สามารถใช้รหัสต่อไปนี้เพื่อจุดประสงค์นี้:
นำเข้า java.util.Scanner;สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
ระบบ .ออก.พิมพ์('พิมพ์หมายเลข<128, press Enter: ');
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
ไบต์bt=scanObj.nextByte();
ระบบ .ออก.println(bt);
scanObj.ปิด();
}
}
หากป้อนตัวเลขที่มากกว่า 127 หรือตัวอักษรสำหรับรหัสนี้ จะมีการออกข้อความแสดงข้อผิดพลาด
nextInt() เมธอด
โทเค็นจำนวนเต็มถัดไปที่เป็นอินพุตสามารถตรวจสอบและยอมรับได้ สามารถใช้รหัสต่อไปนี้:
นำเข้า java.util.Scanner;สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
ระบบ .ออก.พิมพ์('ป้อนจำนวนเต็มใดๆ: ');
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
intหนึ่ง=scanObj.nextInt();
ระบบ .ออก.println(หนึ่ง);
scanObj.ปิด();
}
}
ช่องว่างนำหน้าหรือต่อท้ายถูกลบออก สำหรับรหัสนี้ จะยอมรับค่าจำนวนเต็มใดๆ รวมถึงค่าที่มากกว่า 127 ด้วยเมธอด nextXXX() เหล่านี้ เมื่อการตรวจสอบล้มเหลว จะมีการแสดงข้อความแสดงข้อผิดพลาด
ถัดไปBigInteger() Method
ดูเหมือนว่าวิศวกรซอฟต์แวร์จะไม่มีวันหยุดคิดหาสิ่งใหม่ๆ จำนวนเต็มขนาดใหญ่คือจำนวนเต็มที่มีค่ามากกว่าจำนวนเต็มมาก อย่างไรก็ตาม สำหรับ Java สามารถอ่านได้ในลักษณะเดียวกับจำนวนเต็ม รหัสต่อไปนี้แสดงให้เห็นสิ่งนี้:
นำเข้า java.util.Scanner;นำเข้า java.math.BigInteger;
สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
ระบบ .ออก.println('ป้อนจำนวนเต็มใดๆ สำหรับ Big Integer: ');
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
BigInteger หนึ่ง=scanObj.ต่อไปBigInteger();
ระบบ .ออก.println(หนึ่ง);
scanObj.ปิด();
}
}
หมายเหตุคำสั่งนำเข้า นำเข้า java.math.BigInteger; นอกจากนี้ โปรดทราบว่าประเภทจำนวนเต็มขนาดใหญ่เริ่มต้นด้วยตัวพิมพ์ใหญ่ B ไม่ใช่ตัวพิมพ์เล็ก b
nextFloat() เมธอด
โทเค็นโฟลตถัดไปเป็นอินพุตสามารถตรวจสอบและยอมรับได้ สามารถใช้รหัสต่อไปนี้:
นำเข้า java.util.Scanner;สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
ระบบ .ออก.พิมพ์('ป้อนโฟลตใด ๆ : ');
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
ลอยหนึ่ง=scanObj.ต่อไปFloat();
ระบบ .ออก.println(หนึ่ง);
scanObj.ปิด();
}
}
ตัวอย่างของจำนวนทศนิยมคือ 23.456 ช่องว่างนำหน้าหรือต่อท้ายถูกลบออก
ต่อไปดับเบิ้ล()
โทเค็นคู่ถัดไปเป็นอินพุตสามารถตรวจสอบและยอมรับได้ สามารถใช้รหัสต่อไปนี้:
นำเข้า java.util.Scanner;สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
ระบบ .ออก.พิมพ์('ป้อนคู่ใด ๆ : ');
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
สองเท่าหนึ่ง=scanObj.ต่อไปDouble();
ระบบ .ออก.println(หนึ่ง);
scanObj.ปิด();
}
}
ตัวอย่างของเลขคู่คือ 23.456 จำนวนคู่แตกต่างจากทศนิยมเนื่องจากมีข้อผิดพลาดน้อยกว่า ช่องว่างนำหน้าหรือต่อท้ายถูกลบออก
nextLine() วิธีการ
เมธอด nextLine() ใช้สำหรับสตริง หากสตริงเป็นบรรทัดอินพุตจากแป้นพิมพ์หลังจากกด Enter สตริงนั้นสามารถมีอักขระขึ้นบรรทัดใหม่ได้ ' ' สามารถใช้รหัสต่อไปนี้:
นำเข้า java.util.Scanner;สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
ระบบ .ออก.println('ป้อนบรรทัดที่มี\NS : ');
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
สตริง NS=scanObj.ต่อไปบรรทัด();
ระบบ .ออก.println(NS);
scanObj.ปิด();
}
}
โปรดสังเกตว่าประเภทสตริงเริ่มต้นด้วยตัวพิมพ์ใหญ่ S ไม่ใช่ตัวพิมพ์เล็ก
ก่อนหน้านี้มีการใช้เมธอด nextLine(), hasNext() และ next() ในบทความนี้ สแกนเนอร์มีวิธีการอื่นๆ และวิธีการข้อมูลพื้นฐานอื่นๆ – ดูในภายหลัง
การกำหนดอินพุตให้กับตัวแปร
สามารถกำหนดอินพุตให้กับตัวแปรได้ดังที่แสดงในโค้ดต่อไปนี้:
นำเข้า java.util.Scanner;สาธารณะ ระดับห้องเรียน{
สาธารณะ คงที่ โมฆะหลัก( สตริง []args) {
สแกนเนอร์ scanObj= ใหม่สแกนเนอร์( ระบบ .ใน);
ระบบ .ออก.พิมพ์('ใส่ชื่อ: ');
สตริง ชื่อ=scanObj.ต่อไปบรรทัด();
ระบบ .ออก.พิมพ์('ป้อนอายุ:');
intอายุ=scanObj.nextInt();
ระบบ .ออก.พิมพ์('ป้อนเงินเดือน: ');
สองเท่าเงินเดือน=scanObj.ต่อไปDouble();
ระบบ .ออก.println('ชื่อ: ' +ชื่อ+ ', อายุ: ' +อายุ+ ', เงินเดือน: ' +เงินเดือน);
scanObj.ปิด();
}
}
บทสรุป
Scanner in Java เป็นคลาสในแพ็คเกจ java.util คลาสนี้มีจุดมุ่งหมายเพื่ออ่านอินพุตจากสตริง คีย์บอร์ด ไฟล์ หรือซ็อกเก็ตเครือข่าย บทความนี้เน้นไปที่การอ่านอินพุตจากแป้นพิมพ์และแสดงผลที่หน้าต่างเทอร์มินัลเป็นหลัก สามารถใช้แนวคิดที่คล้ายกันเพื่ออ่านอินพุตจากสตริง ไฟล์ หรือช่องสัญญาณเครือข่าย
หากต้องการอ่านอินพุตคีย์บอร์ดทั้งบรรทัด ให้ใช้เมธอด nextLine() บรรทัดที่เป็นสตริงสามารถแบ่งออกเป็นโทเค็นโดยใช้เมธอด hasNext() และ next() และ while loop ตัวคั่นเริ่มต้นสำหรับการแยกคือช่องว่าง แต่โปรแกรมเมอร์สามารถเลือกตัวคั่นอื่นได้ อย่าลืมกด Ctrl+z เพื่อหยุดลูป while ถ้าจำเป็น การลบช่องว่างนำหน้าและต่อท้ายสามารถทำได้โดยใช้รูปแบบอื่นที่ไม่ได้กล่าวถึงในบทความนี้ การตรวจสอบความถูกต้องของโทเค็นสามารถทำได้โดยใช้รูปแบบอื่นที่ไม่ได้ระบุไว้ในบทความนี้
ค่าดั้งเดิมสามารถอ่านได้โดยใช้ nextBoolean(), nextByte(), nextInt() เป็นต้น วิธีการ nextXXX() เหล่านี้จะตรวจสอบความถูกต้อง และยังลบช่องว่างนำหน้าและต่อท้าย
Java Scanner มีวิธีการอีกมากมาย อย่างไรก็ตาม บทความนี้ได้อธิบายการใช้งานพื้นฐานของ Scanner แล้ว การเลือกโทเค็นทำได้จริงโดยใช้เทคนิคนิพจน์ทั่วไป การใช้เทคนิคนิพจน์ทั่วไปคือการสนทนาในบางครั้ง