CodeGym/Blog Java/Ngẫu nhiên/Lớp máy quét Java

Lớp máy quét Java

Xuất bản trong nhóm
CHÀO! Bài học hôm nay của chúng ta sẽ rất đặc biệt! Trong bài học hôm nay, chúng ta sẽ nói về Java Scanner Class. Trước đây, quá trình hoàn thành các tác vụ và viết chương trình rất đơn giản: chúng ta viết một số mã, chạy hàm main()phương pháp, chương trình sẽ thực hiện những gì được yêu cầu và chúng tôi đã hoàn thành. Nhưng bây giờ mọi thứ sẽ thay đổi! Hôm nay chúng ta sẽ học cách thực sự tương tác với chương trình: chúng ta sẽ dạy nó cách phản hồi lại các hành động của chúng ta! Trước khi chúng tôi bắt đầu phân tích mã, bạn đã bao giờ phải xử lý một thiết bị như máy quét chưa? Có lẽ. Phần bên trong của máy quét khá phức tạp, nhưng ý tưởng cơ bản về cách thức hoạt động của nó rất đơn giản: nó đọc dữ liệu mà người dùng cung cấp (chẳng hạn như hộ chiếu hoặc hợp đồng bảo hiểm) và lưu trữ thông tin này trong bộ nhớ (ví dụ: dưới dạng hình ảnh ). Hôm nay bạn sẽ tạo máy quét của riêng mình! Tất nhiên, nó sẽ không thể xử lý các tài liệu giấy, nhưng văn bản sẽ không thành vấn đề với nó :) Đi nào!

Lớp Máy quét của Java

Lớp máy quét - 1Trước hết, chúng ta phải làm quen với lớp java.util.Scanner . Chức năng của nó rất đơn giản. Giống như một máy quét thực sự, nó đọc dữ liệu từ một nguồn mà bạn chỉ định. Ví dụ: một chuỗi, một tệp, bảng điều khiển. Tiếp theo, nó nhận ra thông tin và xử lý nó một cách thích hợp. Đây là ví dụ đơn giản nhất:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
Chúng tôi đã tạo một đối tượng máy quét và chỉ định nguồn dữ liệu của nó (một chuỗi văn bản). Phương thức nextLine() truy cập nguồn dữ liệu (văn bản của chúng ta có một câu thơ bốn câu), tìm dòng chưa đọc tiếp theo (là dòng đầu tiên trong trường hợp này) và trả về nó. Sau đó, chúng tôi hiển thị nó trên bàn điều khiển: Đầu ra của bàn điều khiển:
It matters not how strait the gate,
Chúng ta có thể sử dụng phương thức nextLine() nhiều lần và hiển thị toàn bộ đoạn trích bài thơ:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
   }
}
Mỗi lần, máy quét của chúng tôi tiến lên một bước và đọc dòng tiếp theo. Đầu ra của chương trình được hiển thị:
It matters not how strait the gate,
How charged with punishments the scroll,
I am the master of my fate,
I am the captain of my soul
Như chúng tôi đã nói, nguồn dữ liệu của máy quét không nhất thiết phải là một chuỗi. Ví dụ, nó có thể là bảng điều khiển. Một số tin thú vị cho bạn: trước đây, chúng tôi chỉ hiển thị dữ liệu ở đó, nhưng bây giờ chúng tôi sẽ đọc dữ liệu từ bàn phím! Hãy xem lớp Scanner còn làm gì nữa:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
Phương thức nextInt () đọc và trả về số đã nhập. Trong chương trình của chúng tôi, chúng tôi sử dụng nó để gán giá trị cho biến số . Nó đã giống như một máy quét thực sự hơn! Chương trình yêu cầu người dùng nhập một số bất kỳ. Sau khi người dùng thực hiện xong, chương trình cảm ơn người dùng, hiển thị kết quả và kết thúc. Nhưng chúng ta vẫn có một vấn đề nghiêm trọng. Người dùng có thể mắc lỗi và nhập sai nội dung nào đó. Đây là một ví dụ nơi chương trình hiện tại của chúng tôi ngừng hoạt động:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
Hãy thử nhập chuỗi "CodeGym" thay vì một số: Đầu ra bảng điều khiển:
Enter a number:
CodeGym
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Main.main(Main.java:10) Process finished with exit code 1
Ồ, ồ. Chúng ta đang gặp rắc rối lớn -_- Để tránh những tình huống như vậy, chúng ta cần nghĩ ra cách xác minh dữ liệu do người dùng nhập vào. Ví dụ: nếu người dùng nhập bất kỳ thứ gì khác ngoài số, sẽ tốt hơn nếu hiển thị cảnh báo rằng thông tin đã nhập không phải là số. Và nếu thông tin ổn, thì chúng tôi có thể xác nhận. Nhưng điều này sẽ yêu cầu chúng tôi phải "nhìn về tương lai" để xem điều gì sắp xảy ra trong luồng của chúng tôi. Máy quét có thể làm điều này? Và làm thế nào! Và nó có rất nhiều phương thức để thực hiện việc này: hasNextInt() — Phương thức này kiểm tra xem đoạn dữ liệu đầu vào tiếp theo có phải là một số hay không (trả về đúng hoặc sai, nếu phù hợp). hasNextLine() — Phương thức này kiểm tra xem đoạn đầu vào tiếp theo có phải là một chuỗi hay không. hasNextByte() ,hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() — Tất cả các phương thức này thực hiện kiểm tra tương tự đối với các loại dữ liệu còn lại. Hãy thử thay đổi chương trình đọc số của chúng tôi:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thanks! You entered the number " + number);
       } else {
           System.out.println("Sorry, but this is clearly not a number. Restart the program and try again!");
       }

   }
}
Bây giờ chương trình của chúng ta sẽ kiểm tra xem ký tự tiếp theo được nhập có phải là một số hay không. Và nó chỉ hiển thị xác nhận nếu có. Nếu đầu vào không vượt qua kiểm tra, chương trình sẽ ghi chú và yêu cầu người dùng thử lại. Về cơ bản, bạn có thể giao tiếp với đối tượng Máy quét và tìm hiểu trước loại dữ liệu nào đang chờ bạn. Một số, chuỗi, hoặc cái gì khác? Một số? Và loại nào? Một int , short , long ??" Tính linh hoạt này cho bạn cơ hội xây dựng logic chương trình phụ thuộc vào hành vi của người dùng. Chúng ta nên lưu ý một phương thức quan trọng khác: useDelimiter() . Bạn truyền một chuỗi cho phương thức này. Chuỗi chứa các ký tự bạn muốn sử dụng làm dấu phân cách hoặc dấu phân cách. Ví dụ, giả sử chúng ta đột nhiên quan tâm đến thơ ca Nhật Bản và quyết định sử dụng máy quét của mình để đọc một số bài thơ haiku của nhà thơ vĩ đại Matsuo Bashou. Ngay cả khi ba câu thơ khác nhau được truyền cho chúng ta như một chuỗi vụng về, chúng ta có thể dễ dàng tách chúng ra và trình bày chúng thật đẹp mắt:
public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a withered branch'" +
               "A crow has alighted.'" +
               "Nightfall in autumn." +
               "''***''" +
               "Such a moon above,'" +
               "Like a tree cut at the root:'" +
               "he fresh cut is white." +
               "''***''" +
               "How the river floods!'" +
               "A heron wanders on short legs,'" +
               "Knee-deep in the water.");

       scan.useDelimiter("'");

       while (scan.hasNext()) {
           System.out.println(scan.next());
       }

       scan.close();
   }
}
Chúng tôi sử dụng "\ n /*/*/*" (ký tự dòng mới và ba dấu hoa thị) làm dấu phân cách. Kết quả là, chúng tôi có đầu ra giao diện điều khiển đẹp mắt, giống như trong sách:
On a withered branch
A crow has alighted.
Nightfall in autumn.

***

Such a moon above,
Like a tree cut at the root:
The fresh cut is white.

***

How the river floods!
A heron wanders on short legs,
Knee-deep in the water.
Ví dụ này có thêm một phương pháp mà chúng ta phải chỉ ra: close() . Giống như bất kỳ đối tượng nào làm việc với luồng I/O, máy quét phải được đóng lại khi hoàn thành để nó ngừng tiêu tốn tài nguyên của máy tính. Đừng bao giờ quên phương thức close() !
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

       sc.close(); // Now we've done everything right!

   }
}
Đó là nó! Như bạn có thể thấy, về mức độ hữu ích của nó, lớp Scanner khá dễ sử dụng! :) Để củng cố những gì bạn đã học, chúng tôi khuyên bạn nên xem một video bài học từ Khóa học Java của chúng tôi
Bình luận
  • Phổ biến
  • Mới
Bạn phải đăng nhập để đăng nhận xet
Trang này chưa có bất kỳ bình luận nào