Класс Scanner в Java
Класс Scanner в Java позволяет читать/парсить данные полученные, например, из консоли или файла на диске. При этом Scanner использует разделитель, который по умолчанию является пробельным символом. Давайте рассмотрим пример. Напишем небольшой класс, который будет получать данные из консоли и выводить их (будем работать с числами int).
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextInt()) { int i = sc.nextInt(); System.out.print(i + ""); } } } |
Теперь скомпилируем, запустим программку через консоль и попробуем вводить что-то, например, 456 12 34. Выведет 4561234:
Если мы введем какие-то буквы, то программа остановится, т.к. уже не выполняется условие while (sc.hasNextInt()).
Если тип вводимых данных неизвестен, то можно использовать более универсальный метод hasNext().
1 2 3 |
while (sc.hasNext()) { System.out.print(sc.next()); } |
Можно задавать другой разделить вместо пробела:
1 2 3 4 5 6 7 8 9 10 |
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in).useDelimiter("\\s*xxx\\s*");; while (sc.hasNext()) { System.out.print("" + sc.next()); } } } |
Введем в консоли it xxxis xxxthe xxxexample xxx и получим:
itistheexample
Кстати, если в конце строки не поставить xxx, то выведется обрезанная строка itisthe.
Также можно парсить данные не только из консоли, но и из какого-то файла. Пример:
1 2 3 4 5 |
Scanner sc = new Scanner(new File("myFile")); while (sc.hasNextLine()) { System.out.print(sc.nextLine()); } s.close(); |
При закрытии сканнера методом close() происходит также закрытие ресурса, из которого берутся данные, если только он реализует интерфейс Closeable.
Как сказано в документации, класс Scanner не рекомендуется использовать в многопоточных приложениях без внешней синхронизации.
Категория: Java
Нифига не понял. Есть ли какой нибудь видео урок на данную тему?