Top.Mail.Ru

Перечень уроков по Java

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.