Bazaprogram.ru

Новости из мира ПК
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Класс сканер java

Класс сканера в Java

Scanner — это класс в пакете java.util, используемый для получения ввода примитивных типов, таких как int, double и т. Д., А также строк. Это самый простой способ чтения ввода в Java-программе, хотя и не очень эффективный, если вам нужен метод ввода для сценариев, где время является ограничением, как в конкурентном программировании.

  • Чтобы создать объект класса Scanner, мы обычно передаем предопределенный объект System.in, который представляет стандартный поток ввода. Мы можем передать объект класса File, если мы хотим прочитать ввод из файла.
  • Чтобы прочитать числовые значения определенного типа данных XYZ, используйте функцию nextXYZ (). Например, чтобы прочитать значение типа short, мы можем использовать nextShort ()
  • Для чтения строк мы используем nextLine ().
  • Чтобы прочитать один символ, мы используем next (). CharAt (0). Функция next () возвращает следующий токен / слово на входе в виде строки, а функция charAt (0) возвращает первый символ в этой строке.

Давайте посмотрим на фрагмент кода для чтения данных различных типов данных.

// Java-программа для чтения данных различных типов с использованием класса Scanner.

public class ScannerDemo1

public static void main(String[] args)

// Объявляем объект и инициализируем

// предопределенный стандартный объект ввода

Scanner sc = new Scanner(System.in);

String name = sc.nextLine();

char gender = sc.next().charAt( 0 );

// Числовой ввод данных

// можно прочитать байты, короткие и плавающие

// используя функции с похожими именами.

int age = sc.nextInt();

long mobileNo = sc.nextLong();

double cgpa = sc.nextDouble();

// Распечатать значения, чтобы проверить, был ли ввод получен правильно.

System.out.println( «Name: » +name);

System.out.println( «Gender: » +gender);

System.out.println( «Age: » +age);

System.out.println( «Mobile Number: » +mobileNo);

System.out.println( «CGPA: » +cgpa);

Иногда мы должны проверить, относится ли следующее значение, которое мы читаем, к определенному типу или ввод закончился (обнаружен маркер EOF).

Затем мы проверяем, имеет ли вход сканера нужный нам тип, с помощью функций hasNextXYZ (), где XYZ — это интересующий нас тип. Функция возвращает true, если у сканера есть токен этого типа, в противном случае — false. Например, в приведенном ниже коде мы использовали hasNextInt (). Чтобы проверить строку, мы используем hasNextLine (). Точно так же, чтобы проверить наличие одного символа, мы используем hasNext (). CharAt (0).

Давайте посмотрим на фрагмент кода, чтобы прочитать некоторые числа из консоли и вывести их среднее значение.

// Java-программа для чтения некоторых значений с помощью Scanner
// Класс и напечатать их среднее.

public class ScannerDemo2

public static void main(String[] args)

// Объявляем объект и инициализируем

// предопределенный стандартный объект ввода

Scanner sc = new Scanner(System.in);

// Инициализируем сумму и количество входных элементов

int sum = 0 , count = 0 ;

// Проверяем, доступно ли значение int

// Чтение значения типа int

int num = sc.nextInt();

int mean = sum / count;

System.out.println( «Mean: » + mean);

Эта статья предоставлена Сукрит Бхатнагар . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Класс сканер java

Наиболее простой способ ввзаимодействия с пользователем представляет консоль: мы можем выводить на консоль некоторую информацию или, наоборот, считывать с консоли некоторые данные. Для взаимодействия с консолью в Java применяется класс System , а его функциональность собственно обеспечивает консольный ввод и вывод.

Вывод на консоль

Для создания потока вывода в класс System определен объект out . В этом объекте определен метод println , который позволяет вывести на консоль некоторое значение с последующим переводом консоли на следующую строку. Например:

В метод println передается любое значение, как правило, строка, которое надо вывести на консоль. И в данном случае мы получим следующий вывод:

При необходимости можно и не переводить курсор на следующую строку. В этом случае можно использовать метод System.out.print() , который аналогичен println за тем исключением, что не осуществляет перевода на следующую строку.

Консольный вывод данной программы:

Но с помощью метода System.out.print также можно осуществить перевод каретки на следующую строку. Для этого надо использовать escape-последовательность n:

Нередко необходимо подставлять в строку какие-нибудь данные. Например, у нас есть два числа, и мы хотим вывести их значения на экран. В этом случае мы можем, например, написать так:

Консольный вывод программы:

Но в Java есть также функция для форматированного вывода, унаследованная от языка С: System.out.printf() . С ее помощью мы можем переписать предыдущий пример следующим образом:

Читать еще:  Hello world javascript

В данном случае символы %d обозначают спецификатор, вместо которого подставляет один из аргументов. Спецификаторов и соответствующих им аргументов может быть множество. В данном случае у нас только два аргумента, поэтому вместо первого %d подставляет значение переменной x, а вместо второго — значение переменной y. Сама буква d означает, что данный спецификатор будет использоваться для вывода целочисленных значений.

Кроме спецификатора %d мы можем использовать еще ряд спецификаторов для других типов данных:

%x : для вывода шестнадцатеричных чисел

%f : для вывода чисел с плавающей точкой

%e : для вывода чисел в экспоненциальной форме, например, 1.3e+01

%c : для вывода одиночного символа

%s : для вывода строковых значений

При выводе чисел с плавающей точкой мы можем указать количество знаков после запятой, для этого используем спецификатор на %.2f , где .2 указывает, что после запятой будет два знака. В итоге мы получим следующий вывод:

Ввод с консоли

Для получения ввода с консоли в классе System определен объект in . Однако непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner , который, в свою очередь использует System.in . Например, напишем маленькую программу, которая осуществляет ввод чисел:

Так как класс Scanner находится в пакете java.util , то мы вначале его импортируем с помощью инструкции import java.util.Scanner .

Для создания самого объекта Scanner в его конструктор передается объект System.in . После этого мы можем получать вводимые значения. Например, в данном случае вначале выводим приглашение к вводу и затем получаем вводимое число в переменную num.

Чтобы получить введенное число, используется метод in.nextInt(); , который возвращает введенное с клавиатуры целочисленное значение.

Пример работы программы:

Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:

next() : считывает введенную строку до первого пробела

nextLine() : считывает всю введенную строку

nextInt() : считывает введенное число int

nextDouble() : считывает введенное число double

nextBoolean() : считывает значение boolean

nextByte() : считывает введенное число byte

nextFloat() : считывает введенное число float

nextShort() : считывает введенное число short

То есть для ввода значений каждого примитивного типа в классе Scanner определен свой метод.

Например, создадим программу для ввода информации о человеке:

Здесь последовательно вводятся данные типов String, int, float и потом все введенные данные вместе выводятся на консоль. Пример работы программы:

Обратите внимание для ввода значения типа float (то же самое относится к типу double) применяется число «1,7», где разделителем является запятая, а не «1.7», где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.

Использование класса Scanner в Java — примеры и методы

Это руководство по посвящено использованию класса Scanner в Java пакета java.util. Мы будем показывать базовое применение класса Scanner до самых расширенных функций этого класса, используя примеры.

Класс Scanner имеет богатый набор API, который обычно используется для разбиения входных данных конструктора Scanner на токены. Входные данные разбиваются на токены с помощью разделителя, определенного в классе Scanner с использованием метода radix, или могут быть определены.

Объявление:
public final class Scanner
extends Object
implements Iterator, Closeable

Конструкторы класса Scanner — public Scanner(Readable source)

Создает новый сканер, который создает значения, отсканированные из указанного источника.

Параметры: source — источник символов, реализующий интерфейс Readable

Не путайте с типом объекта, доступным для чтения в качестве параметра конструктора. Readable — это интерфейс, который был реализован с помощью BufferedReader, CharArrayReader, CharBuffer, FileReader, FilterReader, InputStreamReader, LineNumberReader, PipedReader, PushbackReader, Reader, StringReader.

Это означает, что мы можем использовать любой из этих классов в Java при создании экземпляра объекта Scanner.

public Scanner(InputStream source)

Создает новый сканер, который создает значения, отсканированные из указанного входного потока. Байты из потока преобразуются в символы с использованием кодировки по умолчанию базовой платформы.

Параметры: источник — входной поток для сканирования.

Метод ввода этого конструктора — InputStream. Класс InputStream является одним из классов верхнего уровня в пакете java.io, и его использование будет проблемой.

Однако мы можем использовать подклассы InputStream, как показано ниже. Мы использовали FileInputStream, поскольку он является подклассом InputStream, при его включении проблем не возникнет.

public Scanner(File source) выдает исключение FileNotFoundException

Байты из файла преобразуются в символы с кодировкой по умолчанию базовой платформы.
Параметры: источник — файл для сканирования

Этот конструктор очень прост. Просто требует источник файла. Единственной целью этого конструктора является создание экземпляра объекта Scanner для сканирования через файл.

Читать еще:  Ошибка при запуске 0хс0000022

public Scanner(Path source) throws IOException

источник — путь к файлу для сканирования. Для параметра конструктора требуется источник Path, который используется редко.

public Scanner(String source)

Создает новый сканер, который выдает значения, отсканированные из указанной строки.

Источник — строка для сканирования.

Этот конструктор может быть самым простым на практике, поскольку для него требуется только строковый параметр, и он строго используется для сканирования ввода строки.

Scanner в Java для чтения файлов

Считать файл очень легко, используя класс Scanner. Нам просто нужно объявить это с помощью конструктора Scanner, например:

Хитрость в итерации по токену Scanner состоит в том, чтобы применять те методы, которые начинаются с hasNext, hasNextInt и т.д. Давайте сначала остановимся на чтении файла построчно.

В приведенном выше фрагменте кода мы использовали флаг scan.hasNextLine() как средство проверки наличия токена, который в этом примере доступен на входе сканера. Метод nextLine() возвращает текущий токен и переходит к следующему.

Комбинации hasNextLine() и nextLine() широко используются для получения всех токенов на входе сканера. После этого мы вызываем метод close(), чтобы закрыть объект и тем самым избежать утечки памяти.

Считать строку из консоли ввода, используя Scanner Class

Класс Scanner принимает также InputStream для одного из своих конструкторов. Таким образом, ввод можно сделать с помощью:

После помещения в наш объект сканера, у нас теперь есть доступ к читаемому и конвертируемому потоку, что означает, что мы можем манипулировать или разбивать входные данные на токены. Используя богатый набор API сканера, мы можем читать токены в зависимости от разделителя, который мы хотим использовать в конкретном типе данных.

Важные советы

Недавно я обнаружил одну проблему. Допустим, что мы просим пользователя ввести идентификатор сотрудника и имя сотрудника из консоли.

После чего мы будем читать ввод с консоли, используя сканер. Идентификатор сотрудника будет читаться с nextInt(), а имя сотрудника будет читаться как nextLine(). Это довольно просто, но это не сработает.

Приведенный выше пример не будет работать, потому что метод nextInt не читает последний символ новой строки вашего ввода и, следовательно, эта новая строка используется при следующем вызове nextLine.

Чтобы решить эту проблему, просто используйте next вместо nextline, но если вы хотите указать только nextLine, добавьте еще один scan.nextLine() после nextInt. Посмотрите ниже фрагмент кода:

Список методов java.util.Scanner

Ниже приведен список методов java.util.Scanner, которые мы можем использовать для сложного анализа ввода.

returnметодОписание
voidclose()Закрывает объект сканера.
Patterndelimiter()Возвращает шаблон, который объект Scanner в настоящее время использует для сопоставления разделителей.
StringfindInLine(Pattern pattern)Этот метод возвращает объект String, который удовлетворяет объекту Pattern, указанному в качестве аргумента метода.
StringfindInLine(String pattern)Пытается найти следующее вхождение шаблона, созданного из указанной строки, игнорируя разделители.
StringfindWithinHorizon(Pattern pattern, int horizon)Ищет следующее вхождение указанного шаблона.
StringfindWithinHorizon(String pattern, int horizon)Ищет следующее вхождение шаблона ввода, игнорируя разделитель
booleanhasNext()Возвращает true, если у этого сканера есть другой токен на входе.
booleanhasNext(Pattern pattern)Возвращает true, если следующий полный токен соответствует указанному шаблону.
booleanhasNext(String pattern)Возвращает true, если следующий токен соответствует шаблону, созданному из указанной строки.
booleanhasNextBigDecimal()Возвращает true, если следующий токен на входе этого сканера можно интерпретировать как BigDecimal с помощью метода nextBigDecimal().
booleanhasNextBigInteger()Возвращает true, если следующий токен на входе этого сканера может быть интерпретирован как BigInteger, по умолчанию с использованием метода nextBigInteger().
booleanhasNextBigInteger(int radix)аналогично методу выше, но в указанном основании с помощью метода nextBigInteger()
booleanhasNextBoolean()проверяет, имеет ли объект логический тип данных в своем буфере.
booleanhasNextByte()возвращает значение true, если следующий байт в буфере сканера можно преобразовать в тип данных байта, в противном случае — значение false.
booleanhasNextByte(int radix)true, если следующий токен на входе этого сканера может быть интерпретирован как значение байта в указанном основании с помощью метода nextByte().
booleanhasNextDouble()true, если следующий токен на входе этого сканера можно интерпретировать как двойное значение с помощью метода nextDouble().
booleanhasNextFloat()аналогично методу выше, но как значение с плавающей запятой, используя nextFloat().
booleanhasNextInt()true, если следующий токен на входе этого сканера можно интерпретировать как значение int по умолчанию с помощью метода nextInt().
booleanhasNextInt(int radix)возвращает логическое значение true, если маркер можно интерпретировать как тип данных int относительно radix, используемого объектом сканера, в противном случае — false.
booleanhasNextLine()возвращает логический тип данных, который соответствует новой строке String, которую содержит объект Scanner.
booleanhasNextLong()Возвращает true, если следующий токен на входе этого сканера может быть интерпретирован как длинное значение по умолчанию с использованием метода nextLong().
booleanhasNextLong(int radix)аналогично методу выше, но в указанном основании с помощью метода nextLong ().
booleanhasNextShort()как короткое значение с использованием метода nextShort().
booleanhasNextShort(int radix)возвращает логическое значение true, если маркер можно интерпретировать как короткий тип данных относительно radix, используемого объектом сканера, в противном случае — false.
IOExceptionioException()Возвращает IOException, последний раз выданный в основе сканера Readable.
Localelocale()возвращает Locale
MatchResultmatch()возвращает объект MatchResult, который соответствует результату последней операции с объектом.
Stringnext()Находит и возвращает следующий полный токен.
Stringnext(Pattern pattern)Возвращает следующий токен, если он соответствует указанному шаблону.
Stringnext(String pattern)Возвращает следующий токен, если он соответствует шаблону, созданному из указанной строки.
BigDecimalnextBigDecimal()Сканирует следующий токен ввода как BigDecimal.
BigIntegernextBigInteger()как BigInteger.
BigIntegernextBigInteger(int radix)как BigInteger.
booleannextBoolean()Сканирует следующий токен ввода как логическое значение и возвращает его.
bytenextByte()как byte.
bytenextByte(int radix)как byte.
doublenextDouble()double.
floatnextFloat()float.
intnextInt()int.
intnextInt(int radix)int.
StringnextLine()Перемещает сканер за текущую строку и возвращает пропущенный ввод.
longnextLong()long.
longnextLong(int radix)long.
shortnextShort()short.
shortnextShort(int radix)short.
intradix()Возвращает основание сканера по умолчанию.
voidremove()Операция удаления не поддерживается данной реализацией Iterator.
Scannerreset()Сбрасывает
Scannerskip(Pattern pattern)Пропускает ввод, соответствующий указанному шаблону, игнорируя разделители.
Scannerskip(String pattern)Пропускает ввод, соответствующий шаблону, созданному из указанной строки.
StringtoString()Возвращает строковое представление
ScanneruseDelimiter(Pattern pattern)Устанавливает шаблон ограничения этого сканера в указанный шаблон.
ScanneruseDelimiter(String pattern)как метод выше, но созданный из указанной строки.
ScanneruseLocale(Locale locale)устанавливает local в указанный local.
ScanneruseRadix(int radix)Устанавливает radix равным указанному.

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Вводный курс. Язык программирования Java

9. Ввод данных. Класс Scanner

Класс Scanner используется для считывания введенных пользователем данных следующих типов: String, byte, short, int, long, float, double.

В Java при работе со строками используется понятие токен. Токен – это подстрока, не содержащая разделителей и ограниченная слева и справа разделителями. Стандартными разделителями являются: пробел ‘ ‘ , символ тубуляции ‘t’ , перевода строки ‘n’ и возврата каретки ‘r’ , например, строка

«Университетский центр Турбо»

содержит три токена:

В этом примере использовался стандартный разделить – пробел. При необходимости можно задать собственный разделить, который доложен иметь тип String .

Вернемся к сканеру. Сканер выполняет поиск токенов во входной строке. Для работы со сканером необходимо создать объект класса Scanner, указав с какими потоками ввода/вывода он будет связан:

  • Стандартный поток ввода — это клавиатура представлен объектом — System.in.
  • Стандартный поток вывода – это дисплей представлен объектом System.out.
  • Потоком ввода может быть файл , например,
  • а также строка, определенная в коде программы, например,

Пример. Создаем объект класса Scanner и связываем его с клавиатурой для ввода данных с клавиатуры:

Scanner scan = new Scanner(System.in);

Класс Scanner имеет следующие основные методы:

  • next() считывает введенную строку
  • nextBoolean() считывает введенное логическое значение
  • nextInt() считывает введенное целое число типа int
  • nextFloat() считывает введенное вещественное число типа float
  • nextDouble() считывает введенное вещественное число типа double
  • nextLine( ) считывает введенную всю строку до символа перехода на новую строку.

Если считываемый тип данных не соответствует используемому типу метода сканера, то возникнет ошибка времени выполнения программы, например, читаем целое число, а пользователь вводит дробное. Для того чтобы избежать подобных ошибок используются методы проверки считываемых типов:

  • boolean hasNextLine() : вернет true если следующим значением является строка, иначе — false;
  • boolean hasNextInt(): вернет true если значением является значение типа int;
  • boolean hasNextFloat() : вернетtrue если следующим значением является значение типаfloat;

Пример. Чтение целого числа

Пример. Чтение вещественного числа

По умолчанию дробное число вводится через запятую. Если требуется вводить число через точку, необходимо установить локаль:

Пример. Чтение последовательности целых чисел

При вводе числа отделяются между собой нажатием клавиши «Enter» или пробелом. Ввод прервется, если будет введено не целое число.

Пример. Ввод строки

Пример. Обработка строки, заданной в коде программы

Пример. Чтение файла

При использовании кириллицы файл должен иметь кодировку UTF-8.

Ссылка на основную публикацию
Adblock
detector