วิธีใช้สแกนเนอร์ใน Java

How Use Scanner Java



Scanner in Java เป็นคลาสในแพ็คเกจ java.util คลาสนี้มีจุดมุ่งหมายเพื่ออ่านอินพุตจากสตริง คีย์บอร์ด ไฟล์ หรือซ็อกเก็ตเครือข่าย บทความนี้เน้นเฉพาะการอ่านอินพุตจากแป้นพิมพ์และแสดงผลที่หน้าต่างเทอร์มินัล สามารถใช้แนวคิดที่คล้ายกันเพื่ออ่านอินพุตจากไฟล์หรือช่องสัญญาณเครือข่าย เครื่องสแกนเนอร์ไม่พิมพ์ไปยังหน้าต่างเทอร์มินัล หากต้องการพิมพ์ไปยังเทอร์มินัล ให้ใช้วัตถุ System.out ง่ายต่อการใช้วัตถุนี้เพื่อพิมพ์ไปยังเครื่องเทอร์มินัล ดังที่แสดงด้านล่าง

หากต้องการใช้คลาส Scanner จะต้องนำเข้าก่อน หลังจากนั้น วัตถุจะต้องสร้างอินสแตนซ์จากวัตถุนั้น หลังจากใช้วัตถุ Scanner จะต้องปิด ออบเจ็กต์สตรีมอินพุตที่แสดงถึงแป้นพิมพ์คือ System.in สแกนเนอร์มีหลายวิธี บทความนี้จะอธิบายเฉพาะที่ใช้กันทั่วไปเท่านั้น







เนื้อหาบทความ



การใช้งาน 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 แล้ว การเลือกโทเค็นทำได้จริงโดยใช้เทคนิคนิพจน์ทั่วไป การใช้เทคนิคนิพจน์ทั่วไปคือการสนทนาในบางครั้ง