JavaRush /Java блог /Random UA /Потоки введення/виводу та рядки в Java
articles
15 рівень

Потоки введення/виводу та рядки в Java

Стаття з групи Random UA
Для введення даних використовується клас Scannerіз бібліотеки пакетів Java. Потоки введення/виводу та рядки в Java - 1Цей клас треба імпортувати у тій програмі, де він використовуватиметься. Це робиться до початку відкритого класу у коді програми. У класі є методи читання чергового символу заданого типу зі стандартного потоку введення, і навіть перевірки існування такого символу. Для роботи з потоком введення необхідно створити об'єкт класу Scanner , при створенні вказавши, з яким потоком введення він буде пов'язаний. Стандартний потік введення (клавіатура) Java представлений об'єктом — System.in. А стандартний потік виведення (дисплей) – вже знайомим вам об'єктом System.out. Є ще стандартний потік для виведення помилок System.err, але робота з ним виходить за рамки нашого курсу.
import java.util.Scanner; // импортируем класс
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // создаём об'єкт класса Scanner
        int i = 2;
        System.out.print("Введите целое число: ");
        if(sc.hasNextInt()) { // возвращает истину если с потока ввода можно считать целое число
          i = sc.nextInt(); // считывает целое число с потока ввода и сохраняем в переменную
          System.out.println(i*2);
        } else {
          System.out.println("Вы ввели не целое число");
        }
    }
}
Метод hasNextDouble(), застосований об'єкту класу Scanner, перевіряє, чи можна вважати з потоку введення дійсне число типу double, а метод nextDouble()- зчитує його. Якщо спробувати рахувати значення без попередньої перевірки, під час виконання програми можна отримати помилку (налагоджувач заздалегідь таку помилку не виявить). Наприклад, спробуйте у поданій далі програмі ввести якесь речове число:
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double  i = sc.nextDouble(); // если ввести букву s, то случится ошибка во время исполнения
        System.out.println(i/3);
    }
}
Є також спосіб nextLine(), що дозволяє зчитувати цілу послідовність знаків, тобто. рядок, отже, отримане через цей метод значення потрібно зберігати в об'єкті класу String. У наступному прикладі створюється два таких об'єкти, потім у них по черзі записується введення користувача, а далі на екран виводиться один рядок, отриманий об'єднанням введених послідовностей символів.
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s1, s2;
        s1 = sc.nextLine();
        s2 = sc.nextLine();
        System.out.println(s1 + s2);
    }
}
Існує і метод hasNext(), що перевіряє чи залишабося в потоці введення якісь символи. У класі Stringіснує маса корисних методів, які можна застосовувати до рядків (перед ім'ям методу вказуватимемо тип того значення, яке він повертає):
  1. int length()— повертає довжину рядка (кількість символів у ньому);
  2. boolean isEmpty()- перевіряє, чи порожній рядок;
  3. String replace(a, b)- Повертає рядок, де символ a (літерал або змінна типу char) замінений на символ b;
  4. String toLowerCase()- Повертає рядок, де всі символи вихідного рядка перетворені до малих;
  5. String toUpperCase()— повертає рядок, де всі символи вихідного рядка перетворені на великі;
  6. boolean equals(s)— повертає істинну, якщо рядок до якого застосований метод, збігається з рядком s вказаним у аргументі методу (за допомогою оператора ==рядка порівнювати не можна, як і будь-які інші об'єкти);
  7. int indexOf(ch)— повертає індекс символу ch у рядку (індекс – це порядковий номер символу, але нумеруватися символи починають з нуля). Якщо символ не буде знайдено, то поверне -1. Якщо символ зустрічається кілька разів, то поверне індекс його першого входження.
  8. int lastIndexOf(ch)— аналогічний до попереднього методу, але повертає індекс останнього входження, якщо смивол зустрівся у рядку кілька разів.
  9. int indexOf(ch,n)— повертає індекс символу ch у рядку, але починає перевірку з індексу n (індекс – це порядковий номер символу, але нумеруватися символи починають з нуля).
  10. char charAt(n)— повертає код символу, що знаходиться в рядку під індексом n (індекс – це порядковий номер символу, але нумеруватися символи починають з нуля).
public class Main {
    public static void main(String[] args) {
        String s1 = "firefox";
        System.out.println(s1.toUpperCase()); // выведет «FIREFOX»
        String s2 = s1.replace('o', 'a');
        System.out.println(s2); // выведет «firefax»
        System.out.println(s2.charAt(1)); // выведет «i»
        int i;
        i = s1.length();
        System.out.println(i); // выведет 7
        i = s1.indexOf('f');
        System.out.println(i); // выведет 0
        i = s1.indexOf('r');
        System.out.println(i); // выведет 2
        i = s1.lastIndexOf('f');
        System.out.println(i); // выведет 4
        i = s1.indexOf('t');
        System.out.println(i); // выведет -1
        i = s1.indexOf('r',3);
        System.out.println(i); // выведет -1
    }
}
Приклад програми, яка виведе на екран індекси всіх прогалин у рядку, введений користувачем з клавіатури:
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        for(int i=0; i < s.length(); i++) {
            if(s.charAt(i) == ' ') {
                System.out.println(i);
            }
        }
    }
}
Посилання на першоджерело: Потоки введення/виводу та рядки в Java
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ