Вводный курс. Язык программирования Java
- Вводный курс. Язык программирования Java
- Просмотров: 30977
9. Ввод данных. Класс Scanner
Класс Scanner используется для считывания введенных пользователем данных следующих типов: String, byte, short, int, long, float, double.
В Java при работе со строками используется понятие токен. Токен – это подстрока, не содержащая разделителей и ограниченная слева и справа разделителями. Стандартными разделителями являются: пробел ' ', символ тубуляции '\t', перевода строки '\n' и возврата каретки '\r', например, строка
"Университетский центр Турбо"
содержит три токена:
Университетский
центр
Турбо
В этом примере использовался стандартный разделить – пробел. При необходимости можно задать собственный разделить, который доложен иметь тип String.
Вернемся к сканеру. Сканер выполняет поиск токенов во входной строке. Для работы со сканером необходимо создать объект класса Scanner, указав с какими потоками ввода/вывода он будет связан:
- Стандартный поток ввода - это клавиатура представлен объектом —System.in.
- Стандартный поток вывода – это дисплей представлен объектом System.out.
- Потоком ввода может быть файл, например,
File file = new File("test.txt");
//связываем scanner c файлом
Scanner sc = new Scanner(file);
- а также строка, определенная в коде программы, например,
String str = "Университетский центр Турбо";
//связываем scanner c объектом строка str
Scanner sc = new Scanner(str);
Пример. Создаем объект класса 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;
Пример. Чтение целого числа
import java.util.Scanner; // импортируем класс
public class MyScanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //создаём объект класса Scanner
int ix;
System.out.print("Введите целое число: ");
if(sc.hasNextInt()) { // возвращает true если число целое
ix = sc.nextInt(); // считывает целое число
System.out.println(ix);
} else {
System.out.println("Вы ввели не целое число");
}
}
}
Пример. Чтение вещественного числа
import java.util.Scanner; // импортируем класс
public class MyScanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // создаём объект класса Scanner
double dx;
System.out.print("Введите вещественное число: ");
if(sc.hasNextDouble()) { // возвращает true если число вещественное
dx = sc.nextDouble(); // считывает целое число
System.out.println(dx);
} else {
System.out.println("Вы ввели не вещественное число");
}
}
}
По умолчанию дробное число вводится через запятую. Если требуется вводить число через точку, необходимо установить локаль:
sc.useLocale(Locale.US);
Пример. Чтение последовательности целых чисел
import java.util.Scanner; // импортируем класс
public class MyScanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // создаём объект класса Scanner
// Считывает последовательность целых чисел
int ix;
System.out.print("Введите целые числа: ");
while(sc.hasNextInt()) {
ix = sc.nextInt();
System.out.println(ix);
}
System.out.println("Вы ввели не целое число");
}
}
При вводе числа отделяются между собой нажатием клавиши «Enter» или пробелом. Ввод прервется, если будет введено не целое число.
Пример. Ввод строки
import java.util.Scanner;
public class MyScanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // создаём объект класса Scanner
String s1;
System.out.print("Введите строку: ");
s1 = sc.nextLine();
System.out.println(s1);
}
}
Пример. Обработка строки, заданной в коде программы
import java.util.Scanner;
public class MyScanner {
public static void main(String[] args) {
String str = "Университетский центр Турбо";
//связываем scanner c объектом строка str
Scanner sc = new Scanner(str);
if(sc.hasNextLine())
{
String line = sc.nextLine();
System.out.println(line);
}
}
}
Пример. Чтение файла
public class MyScanner {
public static void main(String[] args) throws IOException {
File file = new File("test.txt");
try {
//связываем scanner c файлом
Scanner sc = new Scanner(file);
// обрабатываем файл пока в нем еще есть новая строка
while (sc.hasNextLine()) {
String line = sc.nextLine();
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
При использовании кириллицы файл должен иметь кодировку UTF-8.