Как вводить текст с помощью сканера

Обновлено: 23.11.2024

Как я уже говорил вам ранее, существует несколько способов чтения файла в Java, например. FileReader , BufferedReader и FileInputStream . Вы выбрали Reader или InputStream в зависимости от того, читаете ли вы текстовые данные или двоичные данные, например, класс BufferedReader в основном используется для чтения текстового файла в Java. Класс Scanner также является еще одним способом чтения текстового файла в java. Несмотря на то, что Scanner более популярен как утилита для чтения пользовательского ввода из командной строки, вы будете рады узнать, что вы также можете прочитать файл с помощью Scanner.

Похоже на BufferedReader, он обеспечивает буферизацию, но с меньшим размером буфера 1 КБ, и вы также можете использовать Scanner для чтения файла построчно в Java.

Подобно readLine(), класс Scanner также имеет метод nextLine(), который возвращает следующую строку файла. Сканер также предоставляет функции синтаксического анализа, например. вы можете не только читать текст, но и анализировать его в правильный тип данных, например. nextInt() может считывать целое число, а nextFloat() может считывать число с плавающей запятой и т. д.

Класс java.util.Scanner также является более новым по сравнению с BufferedReader классом, добавленным только в версию Java 1.5, поэтому вы не можете гарантировать его доступность во всех версиях Java, но, честно говоря, в 2016 году, когда Java 8 уже старше 2 лет, Java 5 — это конец жизни. Таким образом, для большинства практических целей Scanner следует воспринимать как должное.

В этой статье я приведу несколько примеров чтения текстового файла с помощью Scanner. Он предоставляет массив методов next(), например. next(), nextLine(), nextInt() или nextFloat(). Метод next() возвращает следующий токен, где разделителем по умолчанию является пробел, а метод nextLine() возвращает следующую строку, где разделителем строки может быть \n или \r\n .

Вы также можете прочитать Core Java Volume II — Advanced Features, автор Кей С. Хорстманн, чтобы узнать больше о том, как Scanner анализирует текстовые данные во время чтения. В любом случае, давайте посмотрим на пример сканера, чтобы прочитать текстовый файл и понять больше.

Как прочитать текстовый файл построчно с помощью сканера

Вот пример кода, показывающий, как вы можете прочитать текстовый файл построчно с помощью Scanner. Он использует nextLine() для чтения файла построчно.


Вы можете видеть, что мы использовали метод hasNext(), чтобы проверить, остались ли еще строки, а затем использовали метод nextLine() для фактического чтения строки. Не забудьте закрыть сканер, когда закончите, чтобы предотвратить утечку ресурсов. Это одно из рекомендуемых руководств по кодированию для Java-программистов для написания надежных программ. Вы также можете ознакомиться с рекомендациями по написанию кода на Java: 75 рекомендаций для надежных и безопасных программ.

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

Программа Java для чтения текстового файла с помощью сканера

Вот наша полная программа на Java, которая демонстрирует использование методов nextLine() и next() для чтения данных из текстового файла в Java. По умолчанию метод next() считывает файл слово за словом, где слова разделяются пробелами. В этом примере мы будем читать текстовый файл с именем «file1.txt», который содержит следующие строки:

file1.txt
Java, JavaScript, Jython

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

Чтение текстового файла с помощью Scanner в Java

Это все о том, как читать текстовый файл с помощью Scanner в Java. java.util.Scanner — хороший и мощный класс, позволяющий не только читать пользовательский ввод, но и текстовый файл. Вы также можете настроить поведение метода next(), используя метод nextPattern(), который считывает следующий соответствующий шаблон, заданный регулярным выражением, которое вы даете классу сканера.

Дополнительно можно прочитать Big Java: Early objects, чтобы узнать больше о возможностях класса Scanner и о том, как в полной мере использовать эту замечательную утилиту для чтения пользовательского ввода, файлов и других источников.

Сканирование файлов для импорта в документ Word — это идеальный способ дополнить ваши годовые отчеты, резюме заинтересованных сторон или исполнительные письма, но в большинстве случаев отсканированные файлы заблокированы. Word не может вмешаться в них, чтобы добавить текст, но это не значит, что вы должны довольствоваться тем, как они отображаются на странице Word. Используйте текстовые поля Word для наложения документов, добавляя текст к отсканированным файлам. После печати конечные пользователи никогда не поймут, что вы смешали исходный контент с ранее созданными документами.

Откройте документ Word, содержащий отсканированный документ, чтобы добавить текстовые поля.

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

Перейдите на вкладку «Вставка», затем нажмите кнопку «Текстовое поле». Выберите первый вариант «Простое текстовое поле», который добавляет к отсканированному документу текстовое поле Word по умолчанию.

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

Нажмите на границу текстового поля, чтобы открыть оранжевую вкладку "Инструменты для текстового поля". Эта вкладка доступна только тогда, когда включено само текстовое поле.

Нажмите меню "Заливка фигуры" на ленте новой вкладки и выберите "Без заливки". Это делает ваше текстовое поле прозрачным, а не заполненным белым фоном, поэтому оно не будет заслонять отсканированный документ. Если вы хотите, чтобы фон текстового поля оставался белым и скрывал то, что находится за ним на скане, этот шаг можно пропустить.

Нажмите меню "Контур фигуры" на ленте новой вкладки и выберите "Без контура". Это удаляет черную рамку Word по умолчанию вокруг текстового поля. Теперь текст кажется плавающим на отсканированном изображении, как если бы он был на оригинале.

Повторите процесс, чтобы добавить дополнительные текстовые поля во время сканирования. Вы также можете щелкнуть правой кнопкой мыши, скопировать и вставить текстовое поле, которое вы только что создали, затем выделить и ввести текст поверх текста, чтобы изменить его, сохранив настройки «Без заливки» и «Без контура».

Перейдите на вкладку "Файл" и выберите "Сохранить как". Переименуйте документ, чтобы сохранить оригинал без добавленного текста, а затем нажмите кнопку «Сохранить».

Как я могу прочитать ввод из консоли с помощью класса Scanner? Что-то вроде этого:

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

16 ответов 16

Простым примером, иллюстрирующим работу java.util.Scanner, может быть чтение одного целого числа из System.in . Это действительно очень просто.

Чтобы получить имя пользователя, я бы, вероятно, использовал sc.nextLine() .

Вы также можете использовать next(String pattern), если хотите больше контролировать ввод, или просто проверить переменную имени пользователя.

Дополнительную информацию об их реализации можно найти в документации по API для java.util.Scanner

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

Вы можете использовать инструкцию try with resource в JDK 8, например; попробуйте (сканер-сканер = новый сканер (System.in)) < >

Чтение данных из консоли

BufferedReader синхронизирован, поэтому операции чтения в BufferedReader можно безопасно выполнять из нескольких потоков. Можно указать размер буфера или использовать размер по умолчанию (8192). Значение по умолчанию достаточно велико для большинства целей.

readLine() « просто считывает данные построчно из потока или источника. Строка считается завершенной любой из этих: \n, \r (или) \r\n

Сканер разбивает входные данные на токены, используя шаблон разделителя, который по умолчанию соответствует пробелу (\s) и распознается Character.isWhitespace .

« Пока пользователь не введет данные, операция сканирования может заблокироваться, ожидая ввода. « Используйте Scanner(BUFFER_SIZE = 1024), если вы хотите проанализировать маркер определенного типа из stream. « Сканер, однако, не является потокобезопасным. Он должен быть синхронизирован извне.

next() « Находит и возвращает следующий полный токен из этого сканера. nextInt() « Сканирует следующий токен ввода как целое число.

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

Понимание того, как получить пользовательский ввод в Java, является важным навыком.Например, скажем, вы создаете приложение с формой входа. Вам потребуется обработать вводимые пользователем данные, чтобы получить учетные данные для входа пользователя.

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

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

Класс Java Scanner используется для сбора пользовательского ввода. Сканер является частью пакета java.util, поэтому его можно импортировать без загрузки каких-либо внешних библиотек. Сканер считывает текст со стандартного ввода и возвращает его программе.

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

  1. Если вам нужно работать только с классом java.util.Scanner, вы можете напрямую импортировать класс Scanner.
  2. Если вы работаете с другими модулями в библиотеке java.util, вы можете импортировать всю библиотеку.

Ниже приведен код для каждого из вышеперечисленных методов:

Первая строка кода импортирует класс Scanner. Вторая строка кода импортирует все пакеты из библиотеки java.util, включая Scanner.

Стоит отметить, что в Java есть и другие способы получения данных, вводимых пользователем. Вы можете использовать классы BufferedReader, InputStreamReader, DataInputStream и Console из Java.

81 % участников заявили, что стали более уверенными в своих перспективах работы в сфере технологий после посещения учебного курса. Примите участие в тренировочном лагере сегодня.

Найдите подходящий вариант для буткемпа

В среднем выпускник буткемпа тратит менее шести месяцев на смену карьеры, начиная с буткемпа и заканчивая поиском своей первой работы.

Начните сменить профессию сегодня

Однако класс Scanner является наиболее популярным методом сбора пользовательского ввода в Java. Поэтому в этой статье мы сосредоточимся на этом классе.

Синтаксис пользовательского ввода Java

Вы можете собирать пользовательский ввод с помощью класса Scanner. Класс Scanner считывает текст, который пользователь вставляет в консоль, и отправляет этот текст обратно в программу. Сканер — это основной метод сбора пользовательского ввода Java.

После того как вы импортируете класс Java Scanner, вы можете начать использовать его для сбора пользовательского ввода. Вот синтаксис класса Java Scanner:

В этом примере мы создали переменную с именем input, которая собирает следующее значение, которое пользователь вводит в консоль. Затем мы создали переменную с именем number, которая собирает значение, которое пользователь отправляет на консоль.

Пример пользовательского ввода Java

Например, предположим, что мы создаем приложение для локального компьютерного магазина, которое отслеживает их инвентарь.

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

Вот код, который мы будем использовать для создания этой программы:

  • Care Karma подберет для вас лучшие учебные курсы по технологиям
  • Получайте эксклюзивные стипендии и подготовительные курсы

Первым вводом мы принимаем название элемента. Это будет строка, потому что имена элементов основаны на тексте и используют различные символы. В приведенном ниже коде мы определяем эту строку с помощью кода: String product_name.

Следующий ввод – количество товара. Это будет число. В приведенном ниже коде мы определяем это число с помощью кода: целое количество, где int означает целое число.

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

Название продукта: 15-дюймовый MacBook Pro 2019 г.

Введенное значение: 15-дюймовый MacBook Pro 2019 г.

Введенное значение: 7

Как видите, наша программа собирала данные, вводимые пользователем. Затем он возвращает в консоль введенное пользователем значение. Это позволяет нам убедиться, что наша программа работает.

Как работает наша программа Scanner Java

Давайте разберем наш код шаг за шагом.

  1. Мы импортируем библиотеку сканера в наш код, чтобы мы могли получать данные, вводимые пользователем.
  2. Мы объявляем класс Main, в котором хранится код нашей программы.
  3. Мы инициализируем класс Scanner, используя Scanner input = new Scanner(System.in); Входная переменная Java сохраняет наш инициализированный сканер.
  4. Мы выводим на консоль «Product name: » и просим пользователя ввести название продукта с помощью input.next();.
  5. Мы выводим на консоль название продукта, отправленное пользователем.
  6. Мы выводим Quantity: на консоль и предлагаем пользователю указать количество товара на складе с помощью input.nextInt();.
  7. Мы выводим значение переменной quantity в консоль.

Обратите внимание, что мы использовали другой код для сбора чисел и строк. Когда мы собирали название продукта, мы использовали input.next();, а когда мы собирали количество продукта, мы использовали input.nextInt();.

Сканер Java: типы ввода

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

"Карма карьеры вошла в мою жизнь, когда я больше всего в ней нуждалась, и быстро помогла мне пройти буткемп. Через два месяца после выпуска я нашла работу своей мечты, которая соответствовала моим ценностям и жизненным целям!"

Венера, инженер-программист в Rockbot

Найдите подходящий вариант для буткемпа

Различные типы данных, такие как строки и целые числа, собираются с помощью отдельных методов. Таким образом, для получения логического значения вы будете использовать другой код, чем для сбора числа с плавающей запятой.

В таблице показаны все методы, используемые для сбора пользовательского ввода в Java с использованием класса Scanner:

МетодТип значения, которое собирает метод
nextBoolean() boolean
nextByte()byte
nextDouble() double
nextFloat()float
nextInt() int
nextLine()String
nextLong() длинный
nextShort()короткий

Если вы вставите неверный тип ввода, ваша программа вызовет исключение InputMismatchException. Например, если вы попытаетесь вставить двойное число в поле, которое собирает логические значения, ваша программа вызовет исключение.

Сбор логического значения

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

Для этого мы хотим собрать новое значение с именем on_display, которое будет хранить входные данные как логическое значение, поскольку оно может иметь только два значения: true или false.

Вот код, который мы могли бы использовать для сбора этих данных:

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

Название продукта: 15-дюймовый MacBook Pro 2019 г.

Введенное значение: 15-дюймовый MacBook Pro 2019 г.

Введенное значение: 7

На дисплее: правда

Введенное значение: правда

Наша программа работает так же, как в примере выше. Однако на этот раз мы собираем от пользователя дополнительную ценность: отображается ли вставленный им в программу продукт. Мы используем метод nextBoolean(), чтобы получить это значение от пользователя. Затем мы выводим это значение на консоль.

Заключение

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

В этом руководстве на нескольких примерах мы рассмотрели, как использовать класс Java Scanner для сбора пользовательского ввода. Кроме того, мы обсудили различные типы данных, предлагаемые классом Scanner, которые мы можем использовать для сбора пользовательского ввода.

Читайте также: