Do wprowadzania danych używana jest klasa z biblioteki pakietu Java
Scanner
. Klasę 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 Scanner
sprawdza, czy ze strumienia wejściowego można odczytać liczbę rzeczywistą typu double
i 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 String
posiada 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):
int length()
— zwraca długość ciągu znaków (liczbę znaków);boolean isEmpty()
— sprawdza, czy ciąg znaków jest pusty;String replace(a, b)
— zwraca ciąg znaków, w którym znak a (literał lub zmienna typu char) zostaje zastąpiony znakiem b;String toLowerCase()
— zwraca ciąg znaków, w którym wszystkie znaki oryginalnego ciągu są konwertowane na małe litery;String toUpperCase()
— zwraca ciąg znaków, w którym wszystkie znaki oryginalnego ciągu są zamieniane na wielkie litery;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);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.int lastIndexOf(ch)
- podobnie jak poprzednia metoda, ale zwraca indeks ostatniego wystąpienia, jeśli symbol pojawił się kilka razy w linii.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).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
GO TO FULL VERSION