JavaRush /Blog Java /Random-PL /Strumienie I/O i ciągi znaków w Javie
articles
Poziom 15

Strumienie I/O i ciągi znaków w Javie

Opublikowano w grupie Random-PL
Do wprowadzania danych używana jest klasa z biblioteki pakietu Java Scanner. Strumienie i ciągi we/wy w Javie — 1Klasę tę należy zaimportować do programu, w którym będzie używana. Odbywa się to przed rozpoczęciem klasy publicznej w kodzie programu. Klasa posiada metody umożliwiające odczytanie kolejnego znaku danego typu ze standardowego strumienia wejściowego, a także sprawdzenie istnienia takiego znaku. Aby pracować ze strumieniem wejściowym należy utworzyć obiekt klasy Scanner , określając podczas tworzenia z jakim strumieniem wejściowym będzie on powiązany. Standardowy strumień wejściowy (klawiatura) w Javie jest reprezentowany przez obiekt - System.in. A standardowy strumień wyjściowy (wyświetlacz) to obiekt już Ci znany System.out. Istnieje również standardowy strumień wyjściowy błędów - System.err, ale praca z nim wykracza poza zakres naszego kursu.
import java.util.Scanner; // импортируем класс
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // создаём obiekt класса Scanner
        int i = 2;
        System.out.print("Введите целое число: ");
        if(sc.hasNextInt()) { // возвращает истину если с потока ввода можно считать целое число
          i = sc.nextInt(); // считывает целое число с потока ввода и сохраняем в переменную
          System.out.println(i*2);
        } else {
          System.out.println("Вы ввели не целое число");
        }
    }
}
Metoda hasNextDouble()zastosowana do obiektu klasy Scannersprawdza, czy ze strumienia wejściowego można odczytać liczbę rzeczywistą typu doublei metoda nextDouble()ją odczytuje. Jeśli spróbujesz odczytać wartość bez jej uprzedniego sprawdzenia, podczas wykonywania programu może pojawić się błąd (debugger nie wykryje takiego błędu z góry). Spróbuj na przykład wpisać liczbę rzeczywistą w poniższym programie:
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);
    }
}
Istnieje również metoda nextLine()pozwalająca na odczytanie całego ciągu znaków, tj. string, co oznacza, że ​​wartość uzyskana tą metodą musi być przechowywana w obiekcie klasy String. W poniższym przykładzie tworzone są dwa takie obiekty, następnie po kolei zapisuje się do nich dane wprowadzone przez użytkownika, a następnie na ekranie wyświetlany jest jeden ciąg znaków, powstały w wyniku połączenia wprowadzonych ciągów znaków.
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);
    }
}
Istnieje również metoda hasNext()sprawdzająca, czy w strumieniu wejściowym pozostały jakieś znaki. Klasa Stringposiada wiele przydatnych metod, które można zastosować do ciągów znaków (przed nazwą metody wskażemy typ zwracanej przez nią wartości):
  1. int length()— zwraca długość ciągu znaków (liczbę znaków);
  2. boolean isEmpty()— sprawdza, czy ciąg znaków jest pusty;
  3. String replace(a, b)— zwraca ciąg znaków, w którym znak a (literał lub zmienna typu char) zostaje zastąpiony znakiem b;
  4. String toLowerCase()— zwraca ciąg znaków, w którym wszystkie znaki oryginalnego ciągu są konwertowane na małe litery;
  5. String toUpperCase()— zwraca ciąg znaków, w którym wszystkie znaki oryginalnego ciągu są zamieniane na wielkie litery;
  6. boolean equals(s)— zwraca wartość true, jeśli ciąg znaków, do którego zastosowano metodę, odpowiada ciągowi s podanemu w argumencie metody (nie można porównywać za pomocą operatora ==ciągu, jak w przypadku innych obiektów);
  7. int indexOf(ch)— zwraca indeks znaku ch w ciągu znaków (indeks jest liczbą porządkową znaku, ale znaki numerowane są od zera). Jeśli znak w ogóle nie zostanie znaleziony, zwróci -1. Jeśli znak pojawia się w ciągu więcej niż raz, zwróci indeks pierwszego wystąpienia.
  8. int lastIndexOf(ch)- podobnie jak poprzednia metoda, ale zwraca indeks ostatniego wystąpienia, jeśli symbol pojawił się kilka razy w linii.
  9. int indexOf(ch,n)— zwraca indeks znaku ch w ciągu znaków, ale sprawdzanie rozpoczyna się od indeksu n (indeks jest liczbą porządkową znaku, ale znaki numerowane są od zera).
  10. char charAt(n)— zwraca kod znaku znajdującego się w wierszu pod indeksem n (indeksem jest numer seryjny znaku, ale znaki numerowane są od zera).
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
    }
}
Przykład programu, który wyświetli indeksy wszystkich spacji w wierszu wprowadzonych przez użytkownika z klawiatury:
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);
            }
        }
    }
}
Link do źródła: Strumienie I/O i ciągi znaków w Javie
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION