tek4

Lớp Scanner trong Java

by - September. 26, 2021
Kiến thức
Học
Công nghệ
<p>Trong b&agrave;i viết n&agrave;y, ch&uacute;ng ta sẽ c&ugrave;ng t&igrave;m hiểu về lớp Scanner trong Java v&agrave; c&aacute;c phương thức của n&oacute; c&ugrave;ng với sự trợ gi&uacute;p của c&aacute;c v&iacute; dụ dẫn chứng.</p> <p>Lớp Scanner, l&agrave; một lớp nằm trong g&oacute;i java.util, được sử dụng để đọc dữ liệu đầu v&agrave;o từ c&aacute;c nguồn kh&aacute;c nhau như luồng đầu v&agrave;o, người d&ugrave;ng, tệp.</p> <p>Ta sẽ thực hiện một v&iacute; dụ như sau.</p> <pre class="language-java"><code>import java.util.Scanner; class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Nhap mot tu bat ky: "); String chuoi_ky_tu = input.nextLine(); System.out.println(chuoi_ky_tu); input.close(); } }</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>Nhap mot tu bat ky: xin chao xin chao</code></pre> <p>Trong v&iacute; dụ tr&ecirc;n, c&acirc;u lệnh:</p> <pre class="language-java"><code>Scanner input = new Scanner(System.in);</code></pre> <p>Ở đ&acirc;y, ch&uacute;ng ta đ&atilde; tạo một đối tượng của lớp Scanner c&oacute; t&ecirc;n l&agrave; input. Tham số System.in được sử dụng để lấy đầu v&agrave;o. Sau đ&oacute;, ch&uacute;ng ta đ&atilde; sử dụng phương thức nextLine() của lớp Scanner để đọc một chuỗi k&yacute; tự từ người d&ugrave;ng.</p> <p>Từ v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta cần th&ecirc;m g&oacute;i java.util.Scanner trước khi c&oacute; thể sử dụng lớp Scanner.</p> <pre class="language-java"><code>import java.util.Scanner;</code></pre> <h2>Tạo một đối tượng của lớp Scanner trong Java</h2> <p>Sau đ&acirc;y l&agrave; c&aacute;ch ch&uacute;ng ta c&oacute; thể tạo c&aacute;c đối tượng của Lớp Scanner.</p> <p>V&iacute; dụ:</p> <pre class="language-java"><code>Scanner a = new Scanner(InputStream b); Scanner a2 = new Scanner(File b2); Scanner a3 = new Scanner(String b3);</code></pre> <p>Ở đ&acirc;y, ch&uacute;ng ta đ&atilde; tạo c&aacute;c đối tượng của lớp Scanner để đọc đầu v&agrave;o từ InputStream, File v&agrave; String tương ứng.</p> <h2>C&aacute;c phương thức của lớp Scanner để lấy đầu v&agrave;o</h2> <p>Lớp Scanner cung cấp c&aacute;c phương thức kh&aacute;c nhau cho ph&eacute;p ch&uacute;ng ta đọc c&aacute;c đầu v&agrave;o thuộc c&aacute;c kiểu kh&aacute;c nhau.</p> <table width="787"> <tbody> <tr> <td style="text-align: center;">Phương thức</td> <td style="text-align: center;">M&ocirc; tả</td> </tr> <tr> <td>nextInt()</td> <td>Đọc một gi&aacute; trị kiểu int.</td> </tr> <tr> <td>nextFloat()</td> <td>Đọc một gi&aacute; trị kiểu float.</td> </tr> <tr> <td>nextBoolean()</td> <td>Đọc một gi&aacute; trị kiểu Boolean.</td> </tr> <tr> <td>nextLine()</td> <td>Đọc một d&ograve;ng văn bản.</td> </tr> <tr> <td>next()</td> <td>Đọc một từ.</td> </tr> <tr> <td>nextByte()</td> <td>Đọc một gi&aacute; trị ở dạng byte.</td> </tr> <tr> <td>nextDouble()</td> <td>Đọc một gi&aacute; trị kiểu double.</td> </tr> <tr> <td>nextShort()</td> <td>Đọc một gi&aacute; trị kiểu short.</td> </tr> <tr> <td>nextLong()</td> <td>Đọc một gi&aacute; trị kiểu long.</td> </tr> </tbody> </table> <p>V&iacute; dụ:</p> <pre class="language-java"><code>import java.util.Scanner; class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Nhap mot so nguyen: "); int a = input.nextInt(); System.out.println(a); input.close(); } }</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>Nhap mot so nguyen: 4 4</code></pre> <p>Trong v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta đ&atilde; sử dụng phương thức nextInt() để đọc một gi&aacute; trị số nguy&ecirc;n.</p> <p>V&iacute; dụ 2:</p> <pre class="language-java"><code>import java.util.Scanner; class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Nhap mot chuoi ky tu: "); String a = input.next(); System.out.println(a); input.close(); } }</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>Nhap mot chuoi ky tu: xin chao Xin</code></pre> <p>Trong v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta đ&atilde; sử dụng phương thức next() để đọc một chuỗi từ người d&ugrave;ng. Ở đ&acirc;y, ch&uacute;ng ta đ&atilde; đưa ra một chuỗi k&yacute; tự c&oacute; chứa khoảng trắng. Tuy nhi&ecirc;n, phương thức next() chỉ đọc một chuỗi đầu ti&ecirc;n. Điều n&agrave;y l&agrave; do phương thức next() chỉ đọc đầu v&agrave;o đến k&yacute; tự khoảng trắng. Khi gặp phải khoảng trắng, n&oacute; sẽ trả về chuỗi đ&atilde; đọc (kh&ocirc;ng bao gồm khoảng trắng).</p> <p>V&iacute; dụ 3:</p> <pre class="language-java"><code>import java.util.Scanner; class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Nhap mot chuoi ky tu: "); String a = input.nextLine(); System.out.println(a); input.close(); } }</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>Nhap mot chuoi ky tu: xin chao xin chao</code></pre> <p>Trong v&iacute; dụ đầu ti&ecirc;n, ch&uacute;ng ta đ&atilde; sử dụng phương thức nextLine() để đọc một chuỗi từ người d&ugrave;ng. Kh&ocirc;ng giống như next(), phương thức nextLine() đọc to&agrave;n bộ d&ograve;ng đầu v&agrave;o bao gồm cả khoảng trắng. Phương thức sẽ kết th&uacute;c khi n&oacute; gặp một k&yacute; tự xuống d&ograve;ng \n.</p> <h2>Scanner sử dụng với c&aacute;c số c&oacute; gi&aacute; trị lớn</h2> <p>Scanner cũng c&oacute; thể được sử dụng để đọc gi&aacute; trị số nguy&ecirc;n v&agrave; số thập ph&acirc;n lớn.</p> <ul> <li>nextBigInteger(): Đọc gi&aacute; trị số nguy&ecirc;n lớn từ người d&ugrave;ng.</li> <li>nextBigDecimal(): Đọc gi&aacute; trị thập ph&acirc;n lớn từ người d&ugrave;ng.</li> </ul> <p>V&iacute; dụ:</p> <pre class="language-java"><code>import java.math.BigDecimal; import java.math.BigInteger; import java.util.Scanner; class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Xin moi nhap so nguyen: "); BigInteger a = input.nextBigInteger(); System.out.println(a); System.out.print("Xin moi nhap so thap phan: "); BigDecimal a2 = input.nextBigDecimal(); System.out.println(a2); input.close(); } }</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>Xin moi nhap so nguyen: 12543543 12543543 Xin moi nhap so thap phan: 32490094334.5 32490094334.5</code></pre> <p>Trong v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta đ&atilde; sử dụng g&oacute;i java.math.BigInteger v&agrave; java.math.BigDecimal để đọc một gi&aacute; trị số nguy&ecirc;n v&agrave; số thập ph&acirc;n lớn tương ứng.</p> <h2>C&aacute;ch thức hoạt động của Lớp Scanner</h2> <p>Lớp Scanner đọc to&agrave;n bộ d&ograve;ng k&yacute; tự v&agrave; chia th&agrave;nh c&aacute;c token. Ta c&oacute; thể tạm hiểu token l&agrave; c&aacute;c th&agrave;nh phần nhỏ c&oacute; &yacute; nghĩa đối với tr&igrave;nh bi&ecirc;n dịch trong Java.</p> <p>V&iacute; dụ: Giả sử c&oacute; một chuỗi đầu v&agrave;o như sau.</p> <pre class="language-markup"><code>Xin chao moi nguoi</code></pre> <p>Trong trường hợp n&agrave;y, đối tượng lớp Scanner sẽ đọc to&agrave;n bộ d&ograve;ng k&yacute; tự v&agrave; chia th&agrave;nh c&aacute;c token: "Xin", "chao", &ldquo;moi&rdquo; v&agrave; "nguoi". Đối tượng sau đ&oacute; thực hiện v&ograve;ng lặp duyệt qua từng token v&agrave; đọc từng token bằng c&aacute;c phương thức kh&aacute;c nhau.</p> <p><strong>Ch&uacute; &yacute;: Theo mặc định, khoảng trắng sẽ được sử dụng để ph&acirc;n chia c&aacute;c token.</strong></p> <p>Tr&ecirc;n đ&acirc;y l&agrave; kh&aacute;i niệm v&agrave; v&iacute; dụ cơ bản về lớp Scanner trong Java. Hy vọng mọi người c&oacute; thể &aacute;p dụng v&agrave;o trong chương tr&igrave;nh của m&igrave;nh. Mọi người h&atilde;y tiếp tục theo d&otilde;i c&aacute;c b&agrave;i tiếp theo v&agrave; cập nhật c&aacute;c b&agrave;i mới nhất tr&ecirc;n <a href="http://tek4.vn">tek4</a> nh&eacute;!</p>