JAVA

Le Stringhe

Gestione delle Stringhe in Java: la classe String, l'immutabilità nell'Heap, i metodi di manipolazione testuale e la risoluzione delle anomalie del buffer dello stream di input.

In Java, una Stringa non è un tipo di dato primitivo (come int o double), ma è un Oggetto appartenente alla classe java.lang.String. Questo significa che ogni stringa porta con sé una serie di "strumenti" (metodi) pronti all'uso.

1.1 Caratteristiche fondamentali

  • Immutabilità: Una volta creata, una stringa non può essere modificata. Ogni operazione che sembra modificarla in realtà ne crea una nuova.
  • Indici: Come nei vettori, i caratteri di una stringa partono dall'indice 0.

1.2 Lettura di una singola parola: next()

Il metodo next() legge i caratteri fino al primo spazio vuoto, tabulazione o invio. È l'ideale per leggere nomi singoli o codici senza spazi.


Scanner in = new Scanner(System.in);
System.out.print("Inserisci il tuo nome: ");

// Se l'utente scrive "Mario Rossi", leggerà solo "Mario"
String nome = in.next(); 

1.3 Lettura di una riga intera: nextLine()

Il metodo nextLine() legge tutto ciò che l'utente scrive fino a quando non preme il tasto Invio. È indispensabile per leggere frasi, indirizzi o nomi composti.


Scanner in = new Scanner(System.in);
System.out.print("Inserisci il tuo nome completo: ");

// Se l'utente scrive "Mario Rossi", leggerà "Mario Rossi" correttamente
String nomeCompleto = in.nextLine(); 

1.4 Metodi principali della classe String

Metodo Descrizione Esempio
length() Restituisce la lunghezza della stringa. s.length()
toUpperCase() / toLowerCase() Converte tutto in maiuscolo o minuscolo. s.toUpperCase()
charAt(int index) Restituisce il carattere alla posizione indicata. s.charAt(0)
equals(String s) Fondamentale: confronta il contenuto di due stringhe. s1.equals(s2)

Esempio di "Pulizia Buffer"


System.out.print("Inserisci l'età: ");
int eta = in.nextInt();

in.nextLine(); // PULIZIA: "Mangia" l'invio rimasto nel buffer

System.out.print("Inserisci il nome: ");
String nome = in.nextLine(); // Ora funzionerà correttamente!

1. La concatenazione semplice

Possiamo unire stringhe fisse (testo tra doppi apici) e variabili. Ricorda di inserire manualmente gli spazi all'interno delle virgolette, altrimenti i testi risulteranno attaccati.


String nome = "Mario";
String cognome = "Rossi";

// Senza spazio: "MarioRossi"
String unitoSbagliato = nome + cognome; 

// Con spazio: "Mario Rossi"
String unitoCorretto = nome + " " + cognome; 

2. Concatenazione con Tipi Diversi

Java è molto "gentile" nella concatenazione: se provi a unire una Stringa con un int, un double o un boolean, convertirà automaticamente il valore numerico in testo.


int punteggio = 50;
String messaggio = "Il tuo punteggio è: " + punteggio; // Risultato: "Il tuo punteggio è: 50"

3. Attenzione alla Precedenza (L'errore più comune)

Java legge le espressioni da sinistra a destra. Questo può creare risultati inaspettati se mescoliamo somme e concatenazioni senza parentesi.

Esempio di Codice Risultato Finale Perché?
"Totale: " + 10 + 20 "Totale: 1020" Legge "Totale: 10" e poi aggiunge "20" come testo.
"Totale: " + (10 + 20) "Totale: 30" Le parentesi forzano prima la somma matematica.
10 + 20 + " è il totale" "30 è il totale" Inizia con due numeri, fa la somma (30), poi incontra la stringa.


LABORATORIO

Manipolazione e Validazione Testo

In questo laboratorio analizzeremo le stringhe inserite dall'utente per simulare un sistema di validazione dati.


1 Analisi di una Stringa

Scriviamo un programma che chieda all'utente una parola e ne mostri la lunghezza e il primo carattere.


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        System.out.print("Inserisci una parola: ");
        String parola = in.next();
        
        System.out.println("La parola è lunga: " + parola.length() + " caratteri.");
        System.out.println("Il primo carattere è: " + parola.charAt(0));
        System.out.println("In maiuscolo: " + parola.toUpperCase());
        
        in.close();
    }
}

2 Esercitazione Guidata: Verifica Password

Simuliamo un sistema di login. Dobbiamo verificare se la password inserita è corretta (confronto stringhe).


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner tastiera = new Scanner(System.in);
        String passwordCorretta = "Java2024";
        
        System.out.print("Inserisci la password: ");
        String inputUtente = tastiera.next();
        
        // Uso corretto di .equals()
        boolean accessoValido = inputUtente.equals(passwordCorretta);
        
        System.out.println("Accesso consentito: " + accessoValido);
        
        tastiera.close();
    }
}

3 Esercizio: Formattazione Anagrafica

Scenario: Un software deve correggere i nomi inseriti dagli utenti in un database. Scrivete un programma Java che:

  • Chieda all'utente il proprio Nome e Cognome separatamente.
  • Calcoli la lunghezza totale del nome completo (somma delle due stringhe).
  • Controlli se il cognome è uguale a "Rossi" (ignorando maiuscole/minuscole con equalsIgnoreCase).
  • Stampi il nome completo tutto in MAIUSCOLO.