Cách sử dụng Máy quét trong Java

How Use Scanner Java



Máy quét trong Java là một lớp trong gói java.util. Lớp này nhằm mục đích đọc đầu vào từ một chuỗi, bàn phím, tệp hoặc ổ cắm mạng. Bài viết này chỉ tập trung vào việc đọc đầu vào từ bàn phím và hiển thị kết quả tại cửa sổ đầu cuối. Các ý tưởng tương tự có thể được sử dụng để đọc đầu vào từ tệp hoặc kênh mạng. Máy quét không in ra cửa sổ đầu cuối. Để in ra thiết bị đầu cuối, hãy sử dụng đối tượng System.out. Thật đơn giản để sử dụng đối tượng này để in ra thiết bị đầu cuối, như minh họa bên dưới.

Để sử dụng lớp Máy quét, trước tiên nó phải được nhập. Sau đó, một đối tượng phải được khởi tạo từ nó. Sau khi sử dụng đối tượng Máy quét, nó phải được đóng lại. Đối tượng luồng đầu vào đại diện cho bàn phím là System.in. Máy quét có nhiều phương pháp. Chỉ những cái thường được sử dụng sẽ được giải thích trong bài viết này.







Nội dung bài viết



Sử dụng đơn giản Lớp máy quét

Đoạn mã sau yêu cầu người dùng nhập một câu và sau đó nó hiển thị câu:



nhập khẩu java.util.Scanner;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Scanner scanObj= MớiMáy quét( Hệ thống .trong);
Hệ thống .ngoài.println('Nhập một câu và nhấn Enter:');

Dây câu=scanObj.hàng tiếp theo();
Hệ thống .ngoài.println(câu);

scanObj.gần();
}
}

Dòng đầu tiên nhập lớp Máy quét. Trong chức năng chính, dòng đầu tiên tạo một đối tượng máy quét bằng cách sử dụng đối tượng System.in cho bàn phím. Ngay sau khi đối tượng máy quét được tạo, nó bắt đầu chờ đầu vào. Dòng tiếp theo in một câu lệnh, yêu cầu người dùng nhập một câu. Dòng sau trong mã sử dụng phương thức nextLine () của đối tượng máy quét để đọc câu của người dùng sau khi anh ta nhấn Enter. Dòng sau, trong mã, in lại câu ở cửa sổ dòng lệnh. Dòng cuối cùng đóng đối tượng máy quét.





Nhổ dòng đầu vào thành giá trị

Đoạn mã sau chia dòng đầu vào thành các từ (mã thông báo), sử dụng dấu cách làm dấu phân cách:

nhập khẩu java.util.Scanner;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Scanner scanObj= MớiMáy quét( Hệ thống .trong);
Hệ thống .ngoài.println('Nhập một dòng mã thông báo và nhấn Enter:');

trong khi(scanObj.hasNext()){
Hệ thống .ngoài.println(scanObj.Kế tiếp());
}

scanObj.gần();
}
}

hasNext () và next () là hai phương thức khác của đối tượng máy quét. Khi đối tượng máy quét đọc một dòng, nó sẽ giữ nó. next () truy cập mã thông báo (từ) tiếp theo. hasNext () trả về true nếu có bất kỳ mã thông báo nào khác chưa được truy cập.



Thật không may, người dùng vẫn phải nhập đầu vào để tách và hiển thị lại với mã này. Để kết thúc tất cả những điều đó, hãy nhấn Ctrl + z và bạn sẽ quay lại dấu nhắc lệnh.

Trong đoạn mã trên, dấu phân tách phân tách các mã thông báo trong khoảng trắng. Một nhân vật khác có thể được sử dụng. Đoạn mã sau sử dụng dấu phẩy. Đừng quên nhấn Ctrl + z để kết thúc vòng lặp nếu bạn kiểm tra mã.

nhập khẩu java.util.Scanner;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Scanner scanObj= MớiMáy quét( Hệ thống .trong);
Hệ thống .ngoài.println('Nhập một dòng mã thông báo và nhấn Enter:');

scanObj.useDelimiter(',');

trong khi(scanObj.hasNext()){
Hệ thống .ngoài.println(scanObj.Kế tiếp());
}

scanObj.gần();
}
}

Nếu bạn đã kiểm tra mã, bạn sẽ nhận thấy rằng khoảng trống trong mã thông báo đã được bao gồm như một phần của mã thông báo (đầu ra). Biểu thức scanObj.useDelimiter (,); nhập sau khi dòng nhập liệu đã được đọc; nó là thứ tạo nên dấu phẩy, dấu phân cách.

Đọc và xác thực các kiểu dữ liệu ban đầu

phương thức nextBoolean ()

Trong đoạn mã sau, người dùng phải nhập đúng hoặc sai mà không có dấu ngoặc kép và sau đó nhấn phím Enter nếu người dùng nhập bất kỳ điều gì khác, chẳng hạn như có hoặc không, thông báo lỗi sẽ được hiển thị.

nhập khẩu java.util.Scanner;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Hệ thống .ngoài.in('Bạn trên 24 tuổi? ');
Scanner scanObj= MớiMáy quét( Hệ thống .trong);

booleanbl=scanObj.nextBoolean();
nếu như (bl== thật) {
Hệ thống .ngoài.println('Bạn trên 24 tuổi');
}
khác nếu như (bl== sai) {
Hệ thống .ngoài.println('Bạn dưới 24 tuổi');
}

scanObj.gần();
}
}

Vì java sẽ đưa ra thông báo lỗi miễn là đầu vào không đúng hoặc sai chính xác, if khác đã được sử dụng thay vì else.

Sự khác biệt giữa các phương thức, print và println, là print mong đợi đầu vào trên dòng hiện tại, trong khi println mong đợi đầu vào ở dòng tiếp theo.

phương thức nextByte ()

Với bộ ký tự ASCII, một ký tự là một byte. Tuy nhiên, với một số bộ ký tự phương Đông, một ký tự có thể bao gồm nhiều hơn một byte. Không phụ thuộc vào bộ ký tự, phương thức nextByte đọc và xác nhận byte tiếp theo của đầu vào. Mã sau có thể được sử dụng cho mục đích này:

nhập khẩu java.util.Scanner;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Hệ thống .ngoài.in('Nhập số<128, press Enter: ');
Scanner scanObj= MớiMáy quét( Hệ thống .trong);

bytebt=scanObj.nextByte();
Hệ thống .ngoài.println(bt);

scanObj.gần();
}
}

Nếu một số lớn hơn 127 hoặc một ký tự trong bảng chữ cái được nhập cho mã này, một thông báo lỗi sẽ được đưa ra.

Phương thức nextInt ()

Mã thông báo số nguyên tiếp theo làm đầu vào cũng có thể được xác thực và chấp nhận. Mã sau có thể được sử dụng:

nhập khẩu java.util.Scanner;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Hệ thống .ngoài.in('Nhập bất kỳ Số nguyên nào:');
Scanner scanObj= MớiMáy quét( Hệ thống .trong);

NStrên một=scanObj.tiếp theoInt();
Hệ thống .ngoài.println(trên một);

scanObj.gần();
}
}

Khoảng trắng đầu hoặc cuối đã bị xóa. Đối với mã này, bất kỳ giá trị số nguyên nào, bao gồm các giá trị lớn hơn 127, sẽ được chấp nhận. Với các phương thức nextXXX () này, khi việc xác thực không thành công, một thông báo lỗi sẽ được đưa ra.

Phương thức nextBigInteger ()

Có vẻ như các kỹ sư phần mềm sẽ không bao giờ ngừng nghĩ ra những điều mới. Một số nguyên lớn là một số nguyên có giá trị lớn hơn nhiều giá trị của một số nguyên. Tuy nhiên, với Java, nó có thể được đọc theo cách giống như số nguyên. Đoạn mã sau minh họa điều này:

nhập khẩu java.util.Scanner;
nhập khẩu java.math.BigInteger;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Hệ thống .ngoài.println('Nhập bất kỳ số nguyên nào cho số nguyên lớn:');
Scanner scanObj= MớiMáy quét( Hệ thống .trong);

BigInteger trên một=scanObj.nextBigInteger();
Hệ thống .ngoài.println(trên một);

scanObj.gần();
}
}

Lưu ý câu lệnh nhập, nhập java.math.BigInteger ;. Ngoài ra, lưu ý rằng kiểu số nguyên lớn được bắt đầu bằng chữ hoa B chứ không phải chữ thường b.

Phương thức nextFloat ()

Mã thông báo float tiếp theo làm đầu vào cũng có thể được xác thực và chấp nhận. Mã sau có thể được sử dụng:

nhập khẩu java.util.Scanner;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Hệ thống .ngoài.in('Nhập Float bất kỳ:');
Scanner scanObj= MớiMáy quét( Hệ thống .trong);

trôi nổitrên một=scanObj.nextFloat();
Hệ thống .ngoài.println(trên một);

scanObj.gần();
}
}

Ví dụ về số thực là 23,456. Khoảng trắng đầu hoặc cuối đã bị xóa.

nextDouble ()

Mã thông báo kép tiếp theo làm đầu vào cũng có thể được xác thực và chấp nhận. Mã sau có thể được sử dụng:

nhập khẩu java.util.Scanner;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Hệ thống .ngoài.in('Nhập bất kỳ Double nào:');
Scanner scanObj= MớiMáy quét( Hệ thống .trong);

képtrên một=scanObj.nextDouble();
Hệ thống .ngoài.println(trên một);

scanObj.gần();
}
}

Ví dụ về số kép là 23,456. Số kép khác với số float vì nó có ít sai số hơn. Khoảng trắng đầu hoặc cuối đã bị xóa.

phương thức nextLine ()

Phương thức nextLine () dành cho một chuỗi. Nếu chuỗi là dòng nhập từ bàn phím sau khi nhấn Enter, thì nó có thể có ký tự dòng mới, ‘ n’. Mã sau có thể được sử dụng:

nhập khẩu java.util.Scanner;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Hệ thống .ngoài.println('Nhập một dòng có\n : ');
Scanner scanObj= MớiMáy quét( Hệ thống .trong);

Dây P=scanObj.hàng tiếp theo();
Hệ thống .ngoài.println(P);

scanObj.gần();
}
}

Chú ý rằng kiểu chuỗi được bắt đầu bằng chữ hoa S chứ không phải chữ s viết thường.

Các phương thức nextLine (), hasNext () và next () đã được sử dụng trước đây, trong bài viết này. Máy quét có các phương pháp khác và các phương pháp dữ liệu nguyên thủy khác - xem sau.

Gán đầu vào cho một biến

Đầu vào có thể được gán cho một biến, như đoạn mã sau cho thấy:

nhập khẩu java.util.Scanner;

công cộng lớpLớp{
công cộng tĩnh vô hiệuchủ chốt( Dây []args) {
Scanner scanObj= MớiMáy quét( Hệ thống .trong);

Hệ thống .ngoài.in('Nhập tên: ');
Dây Tên=scanObj.hàng tiếp theo();

Hệ thống .ngoài.in('Nhập Tuổi:');
NStuổi=scanObj.tiếp theoInt();

Hệ thống .ngoài.in('Nhập lương:');
képlương=scanObj.nextDouble();

Hệ thống .ngoài.println('Tên: ' +Tên+ ', Tuổi: ' +tuổi+ ', Lương: ' +lương);

scanObj.gần();
}
}

Phần kết luận

Máy quét trong Java là một lớp trong gói java.util. Lớp này nhằm mục đích đọc đầu vào từ một chuỗi, bàn phím, tệp hoặc ổ cắm mạng. Bài viết này tập trung chủ yếu vào việc đọc đầu vào từ bàn phím và hiển thị kết quả tại cửa sổ đầu cuối. Các ý tưởng tương tự có thể được sử dụng để đọc đầu vào từ chuỗi, tệp hoặc kênh mạng.

Để đọc toàn bộ dòng nhập liệu bằng bàn phím, hãy sử dụng phương thức nextLine (). Dòng dưới dạng một chuỗi có thể được chia thành các mã thông báo, sử dụng các phương thức hasNext () và next () và vòng lặp while. Dấu phân tách mặc định để tách là khoảng trắng, nhưng người lập trình có thể chọn một số dấu phân cách khác. Đừng quên thực hiện Ctrl + z để dừng vòng lặp while, nếu cần. Việc loại bỏ các khoảng trống ở đầu và cuối có thể được thực hiện bằng cách sử dụng các lược đồ khác không được đề cập trong bài viết này. Việc xác thực mã thông báo cũng có thể được thực hiện bằng cách sử dụng các kế hoạch khác không được đề cập trong bài viết này.

Các giá trị nguyên thủy có thể được đọc bằng cách sử dụng nextBoolean (), nextByte (), nextInt (), v.v. Các phương thức nextXXX () này thực hiện xác thực và cũng loại bỏ các dấu cách ở đầu và cuối.

Java Scanner có nhiều phương pháp khác. Tuy nhiên, cách sử dụng cơ bản của Máy quét đã được giải thích trong bài viết này. Việc lựa chọn mã thông báo thực sự được thực hiện bằng kỹ thuật biểu thức chính quy. Việc sử dụng các kỹ thuật biểu thức chính quy là thảo luận, trong một số thời điểm khác.