/* *************************************************************************
* In java le stringhe sono degli oggetti, a differenza del C.
* I caratteri in Java sono in formato UNICODE a 16 bit, non ASCII a 8bit.
* Per dichiarare una stringa si fa in questo modo:
*
* String stringhetta = "Bau Bau";
*
* Le stringhe non possono essere cambiate dopo la loro creazione.
* La classe String ha molti metodi, vediamone alcuni:
*
* charAt(int) ; Restituisce il carattere all'indice specificato.
* ; 0 = primo carattere, lenght()-1 = ultimo.
* equals(String) ; Confronta questa stringa con un'altra. E' case
* ; sensitive, ossia Pippo e PiPpO sono diversi.
* length() ; Restituisce la lunghezza della stringa.
* toLowerCase() ; Converte la stringa in soli caratteri minuscoli.
* toUpperCase() ; "" "" "" maiuscoli
*
* Inoltre ci sono classi riguardanti le stringhe. Una interessante e'
* java.util.StringTokenizer, che ha dei metodi per separare i token
* (alla lettera segni,simboli) un testo: le singole parole di una frase,
* ad esempio. Senza parametri addizionali, i caratteri riconosciuti come
* separatori sono gli spazi, i tab, e gli "a capo" (return e newline).
* Avendo la stringa "Ho 21 anni e sono alto 1.84", si ottengono i token
* "Ho","21","anni","e","sono","alto","1.84".
* Per poter usare StringTokenizer, occorre istanziarlo:
*
* import java.util.StringTokenizer;
*
* String prova1 = "Ho 21 anni e sono alto 1.84";
* StringTokenizer miostoke = new StringTokenizer(prova1);
*
* Il costruttore vuole in entrata la stringa su cui operare.
* Si puo' anche aggiungere un'altra stringa ai parametri del costruttore,
* con i caratteri da considerare delimitatori di token, se si vuole.
* A questo punto, ecco i metodi che ci interessano:
*
* nextToken() ; Restituisce il prossimo token della stringa.
* ; Se viene chiamato quando non ci sono piu' token,
* ; genera l'eccezione NoSuchElementException.
* countTokens() ; Restituisce il numero di token ancora disponibili
* ; prima che nextToken generi un'eccezione per fine
* ; tokens.
* hasMoreTokens() ; Restituisce true (vero) se ci sono ancora token
*
* Vediamo un esempio.
************************************************************************* */
import java.io.*; // Include le funzioni I/O standard di base.
import java.util.StringTokenizer; // Per usare i metodi sui Token.
class Jlez3e { // Da qua inizia la classe Jlez3e
public static void main(String args[]) // Definiamo il metodo Main.
{ // Inizio del main()
System.out.println("Scrivi una stringa di testo:");
String stringhina1 = leggiStr(); // Leggo una stinga da tastiera.
System.out.println("Scrivine un'altra:");
String stringhina2 = leggiStr(); // Leggo una stinga da tastiera.
// Stampiamo le stringhe normalmente
System.out.println("\nLa prima stringa e' " + stringhina1);
System.out.println("La seconda stringa e' " + stringhina2);
// Diamo altre informazioni usando length() e charAt(int).
System.out.print("La stringa 1 inizia con " + stringhina1.charAt(0));
System.out.println(", ed e' lunga " + stringhina1.length() + " caratteri");
System.out.print("La stringa 2 inizia con " + stringhina2.charAt(0));
System.out.println(", ed e' lunga " + stringhina2.length() + " caratteri");
// Controlliamo se le due stringhe sono uguali con equals(String).
if (stringhina1.equals(stringhina2))
System.out.println("Le stringhe sono uguali");
else System.out.println("Le stringhe sono diverse");
// Stampiamo le stringhe con i caratteri convertiti tutti in maiuscolo, con
// toUpperCase(), e tutti in minuscolo, con toLowerCase()
System.out.println("Stringa 1 uppercase: " + stringhina1.toUpperCase());
System.out.println("Stringa 2 lowercase: " + stringhina2.toLowerCase());
// Scopriamo il numero di token della stringa 1 usando countTokens()
StringTokenizer miostoke = new StringTokenizer(stringhina2);
System.out.println("La stringa 1 ha " + miostoke.countTokens() + " token:");
// Dividiamo in token la stringa 1 usando hasMoreTokens() e nextToken().
// Finche' (while) la stringa ha ancora token, stampa il prossimo.
while (miostoke.hasMoreTokens()) {
System.out.println(miostoke.nextToken());
}
} // Fine del metodo principale Main()
/* -------------------------------------------------------------------------
* Definiamo un metodo chiamato leggiStr(), che in entrata non ha
* parametri, e in uscita restituisce una stringa immessa da tastiera.
* String leggiInt()
* ----------------------------------------------------------------------- */
public static String leggiStr()
{
try {
DataInputStream leggilo = new DataInputStream(System.in);
String stringa = leggilo.readLine(); // dichiaro e leggo stringa.
return stringa;
}
catch (Exception e) {
System.out.println("Errore: " + e + " nella lettura da tastiera");
System.exit(0);
return("errore"); // Questo return serve solo perche' il metodo
// abbia un int di ritorno anche in caso di errore
}
} // Fine di "String leggiStr()"
} // Fine della classe Jlez3e
