คลาส java.util.scanner เป็นคลาสการสแกนข้อความง่าย ๆ ที่แยกวิเคราะห์ประเภทข้อมูลและสตริงพื้นฐาน มันใช้การแสดงออกปกติเพื่ออ่านชนิดข้อมูลที่แตกต่างกัน
ในการอ่านลำดับอักขระอย่างมีประสิทธิภาพคลาส Java.io.BufferedReader อ่านข้อความจากสตรีมอินพุตอักขระและบัฟเฟอร์อักขระ
นี่คือความแตกต่างระหว่างสองคลาส:
เมื่อใช้ NextLine () ใน nextxxx () ปัญหาของการใช้คลาสสแกนเนอร์คืออะไร?
พยายามเดาผลลัพธ์ของรหัสต่อไปนี้
// รหัสโดยใช้ Scanner classimport java.util.scanner; คลาสต่างกัน {โมฆะสาธารณะคงที่หลัก (สตริง args []) {เครื่องสแกน scn = เครื่องสแกนใหม่ (System.in); System.out.println ("ป้อนจำนวนเต็ม"); int a = scn.nextint () scn.nextline (); system.out.printf ("คุณได้ป้อน:-" + a + "" + "และชื่อเป็น" + b);}}ป้อนข้อมูล:
50
เกินขีด
เอาท์พุท:
ป้อนจำนวนเต็ม
ป้อนสตริง
คุณได้ป้อน:- 50 และชื่อเป็น
ลองใช้คลาส BufferReader และใช้อินพุตเดียวกัน
// รหัสโดยใช้ bufferedReader classimport java.io.*; คลาสต่างกัน {โมฆะคงที่สาธารณะหลัก (สตริง args []) พ่น IOException {bufferedreader br = bufferedreader ใหม่ (newInputStreamReader (system.in); สตริง "); สตริง b = br.readline (); system.out.printf (" คุณได้ป้อน:- " + a +" และชื่อเป็น " + b);}} ป้อนข้อมูล:
50
เกินขีด
เอาท์พุท:
ป้อนจำนวนเต็ม
ป้อนสตริง
คุณได้ป้อน:- 50 และชื่อเป็น geek
ในคลาสสแกนเนอร์ถ้าเราเรียกเมธอด NextLine () หลังจากวิธีการ 7 nextxxx () วิธีใดวิธีการ NextLine () ไม่สามารถอ่านอะไรได้จากคอนโซลและเคอร์เซอร์นี้จะไม่เข้าคอนโซลมันจะข้ามขั้นตอนนี้ วิธีการ nextxxx () คือวิธีการเหล่านี้, nextint (), nextfloat (), nextByte (), nextshort (), nextDouble (), nextLong (), ถัดไป ()
ไม่มีปัญหาดังกล่าวในคลาส Bufferreader ปัญหานี้เกิดขึ้นในคลาสสแกนเนอร์เท่านั้นเนื่องจากเมธอด nextxxx () ละเว้นอักขระใหม่ *** แต่ nextline () ไม่ได้เพิกเฉย หากเราใช้เมธอด NextLine () มากกว่าหนึ่งวิธีระหว่างเมธอด nextxxx () และวิธีการ NextLine () ปัญหานี้จะไม่เกิดขึ้น เพราะ NextLine () ใช้อักขระใหม่ คุณสามารถอ้างถึงวิธีที่ถูกต้องในการเขียนโปรแกรมนี้ (http://code.geeksforgeeks.org/cerahd) ปัญหานี้เหมือนกับเมธอด scanf () ใน c/c ++ (http://www.geeeksforgeeks.org/problem-with-scanf-hen-ther-there-is-fgetsgetsscanf-after-it/)
ความแตกต่างอื่น ๆ :
• BufferedReader รองรับการซิงโครไนซ์ในขณะที่สแกนเนอร์ไม่ได้ หากเราจัดการกับโปรแกรมแบบมัลติเธรดควรใช้ bufferedReader
• BufferedReader มีหน่วยความจำบัฟเฟอร์เพียงพอเทียบกับสแกนเนอร์
•สแกนเนอร์มีบัฟเฟอร์น้อยมาก (บัฟเฟอร์อักขระ 1KB) เทียบกับ bufferedReader (บัฟเฟอร์ไบต์ 8KB) แต่นี่ก็เพียงพอแล้ว
• BufferedReader นั้นเร็วกว่าสแกนเนอร์เล็กน้อยเพราะเครื่องสแกนทำการแยกคลาสการแยกข้อมูลของข้อมูลอินพุตในขณะที่ BufferedReader เพียงอ่านลำดับของอักขระ
ข้างต้นคือความแตกต่างระหว่างคลาสสแกนเนอร์และคลาส Bufferreader ใน Java แนะนำให้คุณรู้จักโดยบรรณาธิการ (รายละเอียดมาก) ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!