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.

Добавить комментарий
  • Комментарии не найдены
 
DMC Firewall is developed by Dean Marshall Consultancy Ltd