java scanner class tutorial with examples
У цьому навчальному посібнику ми обговоримо, як імпортувати та використовувати клас сканера Java разом з різними методами, API сканера та прикладами:
Ми вже бачили стандартні методи вводу-виводу, що використовуються Java для зчитування / запису даних на стандартні пристрої вводу-виводу.
Java пропонує ще один механізм зчитування вводу користувача. Це клас Scanner. Клас Scanner, хоч і не дуже ефективний, є найпростішим та найкращим способом читання вводу в програмах Java.
=> Перевірте ВСІ підручники Java тут.
Що ви дізнаєтесь:
Клас сканера Java: поглиблений вигляд
Клас сканера в основному використовується для сканування вводу та зчитування введення примітивних (вбудованих) типів даних, таких як int, десятковий, подвійний тощо. Клас сканера в основному повертає маркерний вхід на основі деякого шаблону роздільника. Таким чином, загалом, якщо ви хочете прочитати тип dt, ви можете скористатися функцією nextdt () для читання вхідних даних.
Клас Scanner реалізує інтерфейси Iterator (рядок), Closeable та AutoCloseable.
Давайте вивчимо деталі цього класу Сканер зараз.
Імпортувати сканер
Клас сканера належить до пакету “java.util”. Отже, щоб використовувати у програмі клас Scanner, вам потрібно імпортувати цей пакет наступним чином.
імпортувати java.util. *
АБО
імпортувати java.util.Scanner;
Будь-яке з наведених вище тверджень імпортує клас Scanner та його функціональність у вашу програму.
Клас сканера Java
Після імпорту класу Scanner в програму Java ви можете використовувати його для зчитування вводу різних типів даних. Залежно від того, чи потрібно читати вхідні дані із стандартного вводу, файлу чи каналу, ви можете передати відповідний заздалегідь визначений об’єкт об’єкту Сканер.
Нижче наведено базовий приклад використання класу Сканер.
import java.util.*; public class Main { public static void main(String args()) { Scanner in = new Scanner (System.in); System.out.print ('Enter a String: '); String mystr = in.nextLine(); System.out.println('The String you entered is: ' + mystr); in.close(); } }
Вихід:
У наведеній вище програмі ми створили “System.in” (стандартний вхід) як об’єкт під час створення об’єкта класу Scanner. Потім ми зчитуємо рядок, введений зі стандартного вводу.
API сканера (конструктори та методи)
У цьому розділі ми детально вивчимо API класу Scanner. Клас сканера містить різні перевантажені конструктори для розміщення різних методів введення, таких як System.in, введення файлів, шлях тощо.
У наступній таблиці наведено прототип та опис кожного конструктора класу Scanner.
круті речі, які ви можете робити з C ++
Не | Прототип | Опис |
---|---|---|
7 | Сканер (джерело шляху, рядок charsetName) | Цей конструктор створює новий Сканер, який сканує вказаний файл та виробляє значення |
1 | Сканер (джерело InputStream) | Цей конструктор створює новий сканер, який сканує новий InputStream, джерело та виробляє значення |
два | Сканер (джерело InputStream, рядок charsetName) | Цей конструктор створює новий сканер, який сканує новий InputStream, джерело та виробляє значення |
3 | Сканер (джерело файлу) | Цей конструктор створює новий Сканер, який сканує вказаний файл та виробляє значення |
4 | Сканер (джерело файлу, рядок charsetName) | Цей конструктор створює новий Сканер, який сканує вказаний файл та виробляє значення |
5 | Сканер (рядкове джерело) | Цей конструктор створює новий Сканер, який сканує вказаний рядок і виробляє значення |
6 | Сканер (джерело шляху) | Цей конструктор створює новий Сканер, який сканує вказаний файл та виробляє значення |
8 | Сканер (читабельне джерело) | Цей конструктор створює новий Сканер, який сканує вказане джерело та виробляє значення |
9 | Сканер (джерело ReadableByteChannel) | Цей конструктор створює новий Сканер, який сканує вказаний канал і виробляє значення |
10 | Сканер (ReadableByteChannel джерело, рядок charsetName) | Цей конструктор створює новий Сканер, який сканує вказаний канал і виробляє значення |
Так само, як конструктори, клас Scanner також пропонує численні методи, які використовуються для сканування та зчитування вхідних даних. Він надає різні логічні методи, які дозволяють перевірити, чи наступний маркер у вхідних даних є маркером певного типу даних.
Зверніть увагу, що для кожного конструктора ви можете надати лише один аргумент із заздалегідь визначеним вхідним об’єктом або два аргументи, що складаються із заздалегідь визначеного вхідного об’єкта та набору символів. У випадку одного аргументу передбачається набір символів за замовчуванням.
Існують також методи отримання маркерів кожного типу даних.
Інші методи включають методи встановлення локалі, радіуса, збігу шаблонів, закриття сканера тощо.
У наступній таблиці наведено прототип та опис кожного з основних методів сканування.
Не | Прототип | Опис |
---|---|---|
7 | Логічне hasNextFloat () | Перевіряє, чи має наступний маркер у вході сканера плаваючий тип |
1 | Логічне hasNext () | Повертає true, якщо у вході сканера є інший маркер |
два | Логічне hasNextBigDecimal () | Перевіряє, чи має наступний маркер у вході сканера тип bigDecimal. |
3 | Логічне hasNextBigInteger () | Перевіряє, чи має наступний маркер у вході сканера тип bigInteger |
4 | Логічний hasNextBoolean () | Перевіряє, чи має наступний маркер у вході сканера логічний тип |
5 | Логічний hasNextByte () | Перевіряє, чи має наступний маркер у вході сканера тип Byte |
6 | Логічне hasNextDouble () | Перевіряє, чи має наступний маркер у вході сканера подвійний тип |
8 | Логічне hasNextInt () | Перевіряє, чи має наступний маркер на вході сканера цілочисельний тип |
9 | Логічне hasNextLine () | Перевіряє, чи наступним маркером у вході сканера є інший рядок |
10 | Логічне hasNextLong () | Перевіряє, чи має наступний маркер на вході сканера довгий тип |
одинадцять | Логічне hasNextShort () | Перевіряє, чи є наступний маркер у вході сканера коротким |
12 | Рядок наступний () | Сканує вхідні дані для наступного повного маркера |
13 | BigDecimal nextBigDecimal () | Сканує вхідні дані для наступного маркера BigDecimal |
14 | BigInteger nextBigInteger () | Сканує вхідні дані для наступного маркера BigInteger |
п’ятнадцять | Логічне nextBoolean () | Сканує вхідні дані для наступного булевого маркера |
16 | Байт nextByte () | Сканує вхідні дані для наступного байтового маркера |
17 | Подвійний nextDouble () | Сканує вхідні дані для наступного подвійного маркера |
18 | Float nextFloat () | Сканує вхідні дані для наступного плаваючого маркера |
19 | Int nextInt () | Сканує вхідні дані для наступного цілочисельного маркера |
двадцять | Рядок nextLine () | Отримати вхідний рядок, пропущений з об’єкта Scanner |
двадцять один | Long nextLong () | Сканує вхідні дані для наступного довгого цілого числа |
22 | Короткий nextShort () | Сканує вхідні дані для наступного короткого цілого маркера |
2. 3 | Скидання сканера () | Скиньте сканер, який зараз використовується |
24 | Пропустити сканер () | Ігноруйте роздільники та пропустіть введення, яке відповідає заданому шаблону |
25 | Сканер useDelimiter () | Встановіть шаблон розмежування на вказаний шаблон |
26 | Використання сканера Locale () | Встановіть локальний об'єкт 'Сканери' з вказаною мовою |
27 | Використання сканераRadix () | Встановіть вказаний радіус як значення за замовчуванням для Сканера |
28 | Int radix () | Повертає типовий радіус поточного сканера |
29 | void remove () | Може використовуватися, коли Iterator не підтримує операцію видалення |
30 | Потокові маркери () | Повертає потік символів, розділених розділювачами, із поточного сканера |
31 | Рядок toString () | Подання зворотного рядка даного сканера, який зараз використовується |
32 | IOException ioException () | Повертає IOException, останньо виданий читабельним об'єктом Scanner |
33 | Знайти потік ALL () | Повертає потік результатів збігів, які відповідають заданому шаблону |
3. 4 | Рядок findInLine () | Знайдіть наступне входження шаблону із заданого рядка; ігнорує роздільники |
35 | Рядок findWithinHorizon () | Знайдіть наступне входження шаблону із заданого рядка; ігнорує роздільники |
36 | Розділювач шаблону () | Повертає шаблон, використаний поточним сканером |
37 | Порожнеча закрити () | Закриває сканер |
38 | MatchResult match () | Повертає результат відповідності останньої операції сканування |
39 | Місцевий місцевий () | Повернути локаль поточного сканера |
Перевірте тут щоб дізнатись більше про методи сканування.
Як користуватися сканером у Java?
Тепер, коли ви побачили різні конструктори та методи, надані класом Scanner, давайте тепер реалізуємо деякі приклади, щоб продемонструвати, як використовувати клас Scanner у Java.
Наступна реалізація показує використання класу Scanner для читання вхідних даних із System.in, тобто стандартного вводу.
Тут ми використовуємо заздалегідь визначений об'єкт System.in для створення об'єкта Scanner. Потім користувачеві пропонується ввести ім’я, клас та відсоток. Усі ці деталі зчитуються за допомогою об’єкта класу Scanner.
Зверніть увагу на методи, які використовуються об’єктами Scanner для читання різних типів введення. Оскільки ім’я є рядком, об’єкт Scanner використовує метод next (). Для введення класу він використовує nextInt (), тоді як для відсотків - nextFloat ().
Таким чином, ви можете легко розділити вхідні дані під час читання.
Результат роботи програми відображає введені дані та інформацію.
import java.util.*; public class Main{ public static void main(String ()args){ String name; int myclass; float percentage; //creating object of Scanner class Scanner input = new Scanner(System.in); System.out.print('Enter your name: '); name = input.next(); System.out.print('Enter your class: '); myclass = input.nextInt(); System.out.print('Enter your percentage: '); percentage = input.nextFloat(); input.close(); System.out.println('Name: ' + name + ', Class: '+ myclass + ', Percentage: '+ percentage); } }
Вихід:
Рядок сканера
Як уже зазначалося, під час створення об’єкта Сканер можна використовувати різні заздалегідь визначені об’єкти. Це означає, що ви можете читати вхідні дані зі стандартного вводу, файлів та різних каналів вводу-виводу або зі рядків.
Коли використовується введення рядка, ви також можете використовувати регулярні вирази всередині нього.
Наступні приклади показують програму, в якій Scanner використовує рядок як вхід. Потім цей ввід сканується і маркери відокремлюються, читаючи кожен маркер.
Потім прочитані маркери відображаються у вихідних даних.
import java.util.*; public class Main{ public static void main(String ()args){ System.out.println ('The subjects are as follows :'); String input = '1 Maths 2 English 3 Science 4 Hindi'; Scanner s = new Scanner(input); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); s.close(); } }
Вихід:
Закрийте сканер
Клас Java Scanner використовує метод “Close ()”, щоб закрити Сканер. Клас Scanner також внутрішньо реалізує інтерфейс Closeable, а отже, якщо сканер ще не закритий, базовий інтерфейс Readable викликає свій метод close.
Хорошою практикою програмування є явне закриття Сканера методом Close () після закінчення його використання.
Примітка: Якщо об’єкт Сканер закритий і зроблена спроба пошуку, це призводить до “IllegalStateException”.
Часті запитання
Q # 1) Що таке клас Scanner у Java?
Відповідь: Клас Scanner є частиною пакету 'java.util' Java і використовується для читання введення різних примітивних типів даних, таких як int, float, рядки тощо.
як повернути назад масив Java - -
Q # 2) Яка різниця між методами next () і nextLine () класу Scanner?
Відповідь: Метод next () зчитує введення до пробілу та розміщує курсор на тому самому рядку після зчитування вводу. Однак метод nextLine () зчитує весь рядок введення до кінця рядка, включаючи пробіли.
Q # 3) Що таке hasNext () у Java?
Відповідь: Метод hasNext () є одним із методів Java Scanner. Цей метод повертає true, якщо у вході сканера є інший маркер.
Q # 4) Вам потрібно закрити клас Scanner?
Відповідь: Краще, але не обов’язково закривати клас Scanner, оскільки якщо він не закритий, базовий зручний для читання інтерфейс класу Scanner робить роботу за вас. Компілятор може блимати деяким попередженням, хоча, якщо він не закритий.
Тому, як хороша практика програмування, завжди закривайте Сканер.
Q # 5) Яка мета “system.in” у класі Scanner?
Відповідь: Використовуючи “System.in” у класі Сканер, ви дозволяєте Сканеру читати клавіатуру, підключену до стандартних вхідних даних.
Висновок
У цьому посібнику ми побачили клас Scanner та всі його деталі, включаючи API та реалізацію. Клас сканера використовується для зчитування вхідних даних з різних носіїв, таких як стандартне введення, файли, канали вводу / виводу, рядки з / без регулярних виразів тощо.
Незважаючи на те, що Сканер не дуже ефективний спосіб читання введення, це один з найпростіших способів. Сканер дозволяє читати введення різних примітивних типів даних, таких як int, float, рядки тощо. Коли ви використовуєте рядки як вхідний об'єкт для класу Scanner, ви також можете використовувати регулярні вирази з ним.
Клас сканера також дозволяє читати введені дані, узгоджуючи якийсь шаблон або роздільник.
На закінчення, використання класу Scanner у Java залишається найпростішим та найкращим способом читання вводу.
=> Ознайомтесь з Ідеальним посібником з навчання Java тут.
Рекомендована література
- Що таке Java Java | Підручник з класу Java Vector з прикладами
- Підручник з класу масивів Java - java.util.Arrays Class з прикладами
- Підручник JAVA для початківців: 100+ практичних відео-підручників Java
- Інтерфейс Java та підручник з абстрактних класів із прикладами
- Підручник з роздумів про Java з прикладами
- Нерівний масив у Java - Підручник із прикладами
- Підручник з довжини масиву Java із прикладами коду
- Підручник із рядків Java | Рядові методи Java на прикладах