Урок 19

Класс Scanner


Объект класса java.util.Scanner упрощает разбор строки из потока ввода. При вводе могут использоваться данные из консоли, файла, строки или любого другого источника, реализующего интерфейсы Readable или ReadableByteChannel.

Хотя Scanner и не является потоком, у него тоже обязательно вызывать метод close(), который закроет используемый основной источник.

Пример 1. Использование класса Scanner

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class ScannerExample {
    private static String filename = "scan.txt";

    public static void scanFile() {
        try (FileReader fr = new FileReader(filename);
             Scanner scan = new Scanner(fr)) {
            while (scan.hasNext()) {
                if (scan.hasNextInt()) {
                    System.out.println(scan.nextInt() + " :int");
                } else if (scan.hasNextDouble()) {
                    System.out.println(scan.nextDouble() + " :double");
                } else if (scan.hasNextBoolean()) {
                    System.out.println(scan.nextBoolean() + " :boolean");
                } else {
                    System.out.println(scan.next() + " :String");
                }
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    public static void makeFile() {
        try (FileWriter fw = new FileWriter(filename)) {
            fw.write("2 Java 1,5 true 1.6 ");
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    public static void main(String[] args) {
        ScannerExample.makeFile();
        ScannerExample.scanFile();
    }
}

Пример 2. Использование класса Scanner

import java.util.Scanner;

public class ScannerDelimiterExample {
    public static void main(String[] args) {
        double sum = 0.0;
        Scanner scan = new Scanner("1,3;2,0; 8,5; 4,8; 9,0; 1; 10");
        scan.useDelimiter(";\\s*");
        while (scan.hasNext()) {
            if (scan.hasNextDouble()) {
                sum += scan.nextDouble();
            } else {
                System.out.println(scan.next());
            }
        }
        System.out.printf("Сумма чисел = " + sum);
    }
}


0 comments
Leave your comment: