Ở bài viết trước tôi đã hướng dẫn về cách sử dụng Scanner trong java.Tuy nhiên chúng ta chưa xử lý được trôi lệnh khi dùng scanner trong Java. Bài viết này tôi sẽ hướng dẫn các bạn cách xử lý trôi lệnh với một số cách thường dùng.
[the_ad id=”3598″]
Trôi lệnh khi sử dụng Scanner là gì?
Cùng xem một ví dụ bên dưới:
package com.itphutran.demo; import java.util.Scanner; public class ScannerDemo1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Nhập vào họ tên : "); String hoten = input.nextLine(); System.out.println("Nhập vào tuổi : "); int tuoi = input.nextInt(); System.out.println("Nhập vào tên lớp : "); String tenlop = input.nextLine(); System.out.println(">> THÔNG TIN SINH VIÊN"); System.out.println("Họ tên : "+hoten); System.out.println("Tuổi : "+tuoi); System.out.println("Tên lớp : "+tenlop); } }[the_ad id=”3598″] Khi nhập dữ liệu vào tuổi sau đó các bạn nhập lớp, tuy nhiên chúng ta không thể nhập lớp và sau đó chương trình in ra kết quả hay nói cách khác là xuất dữ liệu với tên lớp bằng rỗng.
Đó chính là hiện tượng trôi lệnh với Scanner trong Java.
Vì sao lại trôi lệnh?
Như qua ví dụ trên, trôi lệnh xảy ra khi chúng ta nhập một số sau đó nhập vào một chuỗi? Vậy có bạn nào đoán được vì sao lại trôi lệnh không? Đó là lý do khi các bạn nhập vào một số, sau đó nhấn Enter thì lúc này, input.nextLine() vì nó là trả về là một chuỗi kiểu String nên sẽ nhận giá trị là ký tự Enter. Như vậy các bạn hiểu lý do tại sao tên lớp bằng rỗng rồi chứ.
Cách xử lý trôi lệnh khi dùng Scanner trong Java
Để xử lý trôi lệnh chúng ta có một số cách thường dùng như sau:
Cách 1: Dùng input.nextLine() để nhận ký tự Enter.
package com.itphutran.demo; import java.util.Scanner; public class ScannerDemo1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Nhập vào họ tên : "); String hoten = input.nextLine(); System.out.println("Nhập vào tuổi : "); int tuoi = input.nextInt(); input.nextLine(); System.out.println("Nhập vào tên lớp : "); String tenlop = input.nextLine(); System.out.println(">> THÔNG TIN SINH VIÊN"); System.out.println("Họ tên : "+hoten); System.out.println("Tuổi : "+tuoi); System.out.println("Tên lớp : "+tenlop); } }
Cách 2: Dùng Integer.parseInt()
package com.itphutran.demo; import java.util.Scanner; public class ScannerDemo1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Nhập vào họ tên : "); String hoten = input.nextLine(); System.out.println("Nhập vào tuổi : "); int tuoi = Integer.parseInt(input.nextLine()); System.out.println("Nhập vào tên lớp : "); String tenlop = input.nextLine(); System.out.println(">> THÔNG TIN SINH VIÊN"); System.out.println("Họ tên : "+hoten); System.out.println("Tuổi : "+tuoi); System.out.println("Tên lớp : "+tenlop); } }
Thông thường, chúng ta sẽ sử dụng cách này thay vì sử dụng cách thứ nhất để xử lý trôi lệnh khi dùng scanner trong java.lý do vì gọn code, và chỉ một dòng thì chúng ta có thể xử lý xong rồi. Chúng ta luôn luôn quy về input.nextLine sau đó convert sang kiểu dữ liệu mà chúng ta mong muốn. Ví dụ : Float.parseFloat() hay Double.parseDouble()…
[the_ad id=”3598″]
Cách 3: Dùng Integer.valueOf
package com.itphutran.demo; import java.util.Scanner; public class ScannerDemo1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Nhập vào họ tên : "); String hoten = input.nextLine(); System.out.println("Nhập vào tuổi : "); int tuoi = Integer.valueOf(input.nextLine()); System.out.println("Nhập vào tên lớp : "); String tenlop = input.nextLine(); System.out.println(">> THÔNG TIN SINH VIÊN"); System.out.println("Họ tên : "+hoten); System.out.println("Tuổi : "+tuoi); System.out.println("Tên lớp : "+tenlop); } }
Như vậy qua ba cách trên, chúng ta hoàn toàn có thể xử lý được trôi lệnh khi sử dụng Scanner trong Java.
Bây giờ tôi sẽ thử chạy một trong 3 cách trên nhé:
Kết quả:
>> THÔNG TIN SINH VIÊN Họ tên :Trần Phú Tuổi : 24 Tên lớp: Java Core
[the_ad id=”3598″]

Chúc các bạn thực hiện thành công!