Clasa Scanner
Clasa Scanner apare în pachetul java.util si permite regasirea într-un text a tipurilor primitive si a sirurilor, folosind expresii regulate.
Un scanner (obiect de tipul Scanner) împarte intrarea în entitati, folosind un sablon de delimitatori (delimitatorii impliciti sunt spatiile albe) si regaseste entitatile prin invocarea de metode next. Pentru a verifica daca urmeaza o entitate de un anumit tip se folosesc metodele hasNext
Exemplu. Citirea unui întreg de la intrarea standard se poate realiza astfel:
Scanner sc = new Scanner(System.in);Intrarea poate fi si un fisier text:
Scanner sc = new Scanner(new File("fisier"));sau un sir de caractere.
Exemplu. Programul urmator realizeaza citirea repetata de la intrarea standard si introducerea într-un fisier "text" a unei succesiuni de întregi si siruri de caractere, pâna când este detectat sirul "STOP"; întregii sunt înscrisi în fisierul aaa, iar sirurile sunt tiparite la iesirea standard.
import java.util.*; import java.io.*;
class Scan
while(!s.equals("STOP"));
out.close(); std_out.close();
}
unde despre clasa PrintWriter vom vorbi în continuare.
Metodele de scanare relative la citire pot conduce la blocare prin asteptarea unei valori de intrare.
Metodele next()
si hasNext()
, precum si metodele asociate
tipurilor primitive (ca de exemplu nextInt()
si hasNextInt()
), încep prin a "sari"
peste intrarile ce corespund sabloanelor de delimitatori si apoi
încearca sa regaseasca urmatoarea entitate.
Un obiect de tipul Scanner
nu este adecvat lucrului cu fire de
executatre decât în prezenta sincronizarii.
Constructorul
are un parametru de unul dintre tipurile:
File
InputStream
Readable
String
ReadableByteChannel
Cele mai folosite metode sunt urmatoarele:
public boolean hasNext()întoarce true daca mai urmeaza o entitate;
public String next()detecteaza si întoarce urmatoarea entitate;
public boolean hasNextLine()întoarce true daca mai urmeaza o noua linie de intrare;
public String nextLine()întoarce urmatoarea linie de la intrare;
În metodele descrise în continuare, XXX poate fi:
Boolean Byte Short Int Long Float Double BigInteger BigDecimal
IllegalStateException
daca scanner-ul este închis.
InputMismatchException
-
daca entitatea nu este cea asteptata;
NoSuchElementException
-
daca s-a ajuns la sfârsitul intrarii;
IllegalStateException
-
daca scanner-ul este închis.
Metoda:
public void close()
închide scanner-ul.
Se observa ca nu exista o metoda nextXXX() pentru citirea de caractere. Putem însa citi o succesiune de caractere separate prin spatii albe, pâna la , de exemplu în modul urmator:
Scanner sc = new Scanner(System.in);
PrintWriter std_out = new PrintWriter(System.out);
char ch = sc.next().charAt(0);
while(ch != '$')
|