ความแตกต่างหลัก:
- เครื่องสแกนเนอร์
- เครื่องสแกนข้อความอย่างง่ายซึ่งสามารถแยกประเภทและสตริงดั้งเดิมโดยใช้การแสดงออกปกติ
- เครื่องสแกนแบ่งการป้อนข้อมูลเป็นโทเค็นโดยใช้รูปแบบตัวคั่นซึ่งโดยค่าเริ่มต้นจะจับคู่กับช่องว่าง โทเค็นผลลัพธ์อาจถูกแปลงเป็นค่าของชนิดต่าง ๆ โดยใช้วิธีการถัดไปต่าง ๆ
ตัวอย่าง
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
พิมพ์เอาต์พุตต่อไปนี้:
1
2
red
blue
สามารถสร้างเอาต์พุตเดียวกันด้วยรหัสนี้ซึ่งใช้นิพจน์ทั่วไปเพื่อวิเคราะห์โทเค็นทั้งสี่พร้อมกัน:
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input);
s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
MatchResult result = s.match();
for (int i=1; i<=result.groupCount(); i++)
System.out.println(result.group(i));
s.close(); `
BufferedReader:
โดยทั่วไปคำขอการอ่านแต่ละครั้งที่ทำจากเครื่องอ่านจะทำให้การร้องขอการอ่านที่สอดคล้องกันทำขึ้นมาจากอักขระพื้นฐานหรือสตรีมไบต์ ดังนั้นจึงแนะนำให้ห่อ BufferedReader รอบ ๆ Reader ที่การดำเนินการ read () อาจมีค่าใช้จ่ายสูงเช่น FileReaders และ InputStreamReaders ตัวอย่างเช่น,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
จะบัฟเฟอร์อินพุตจากไฟล์ที่ระบุ หากไม่มีการบัฟเฟอร์การร้องขอ read () หรือ readLine () แต่ละรายการอาจทำให้ไบต์อ่านจากไฟล์แปลงเป็นอักขระจากนั้นส่งคืนซึ่งจะไม่มีประสิทธิภาพมาก โปรแกรมที่ใช้ DataInputStreams สำหรับการป้อนข้อความสามารถแปลเป็นภาษาท้องถิ่นโดยการแทนที่แต่ละ DataInputStream ด้วย BufferedReader ที่เหมาะสม
ที่มา: ลิงค์