System.out.printf [risolto]

di il
2 risposte

System.out.printf [risolto]

Vorrei gentilmente, se qualcuno mi spiegasse come funziona la funzione System.out.printf, che non lo per niente capita ho visto solo segni di percentuale ma niente non lo capita.

2 Risposte

  • Re: System.out.printf [risolto]

    reggioboy ha scritto:


    Vorrei gentilmente, se qualcuno mi spiegasse come funziona la funzione System.out.printf, che non lo per niente capita ho visto solo segni di percentuale ma niente non lo capita.
    Questa funzionalità si chiama "formattazione delle stringhe" ed è stata introdotta in Java 5. Permette di comporre facilmente una stringa inserendo all'interno altri dati e risulta più semplice e anche molto più flessibile rispetto alla "banale" concatenazione delle stringhe che esiste da sempre.

    Questa funzionalità è stata resa possibile anche grazie ad un'altra funzionalità (sempre di Java 5) che sono i metodi varargs, cioè con un numero variabile di argomenti.

    Il "motore" di tutta la formattazione è la classe java.util.Formatter ma NON la si usa praticamente mai direttamente (è rarissimo doverla usare direttamente!). Nella documentazione javadoc di Formatter comunque c'è tutta la spiegazione e la specifica su come usare questa funzionalità, quindi questa documentazione generalmente è da leggere (è in inglese ... lo so, non è per tutti).

    Invece per semplificare l'uso sono stati inseriti metodi "format" e "printf" in varie altre classi:
    - String ha due format
    - PrintStream e PrintWriter (di java.io) hanno sia dei format che dei printf

    Nota: printf è UGUALE a format, è stato messo anche printf solo per far "sentire a casa" chi proviene dal linguaggio C dove esiste la conosciutissima funzione printf() della sua libreria standard.

    I format/printf ricevono una stringa di formato che contiene gli "specificatori di formato" e poi un numero variabile di argomenti. Ogni specificatore di formato inizia con % e termina con un carattere. Poi ci possono essere vari attributi e flag che ne alterano il formato e il senso.

    Ripeto che TUTTA la documentazione sta nel javadoc di Formatter. E ovviamente non te la posso "raccontare" tutta in un solo post.

    Ci sono vari specificatori, ad esempio %s per le stringhe, %d per i numeri interi e MOLTO altro. Ad esempio %n indica un newline.

    Ad esempio:
    public class Prova {
        public static void main(String[] args) {
            String nome = "Mario";
            int punteggio = 156;
    
            System.out.printf("Nome [%-20s], punteggio: %010d %n", nome, punteggio);
        }
    }
    Stampa
    Nome [Mario               ], punteggio: 0000000156
    %-20s indica una stringa (essendo il primo specificatore, si riferisce al primo argomento disponibile, nome), il "-" indica di allineare a sinistra e 20 indica il numero (minimo!) di caratteri da usare, riempiti da spazi se necessario.

    %010d indica un numero (riferito al secondo argomento disponibile, punteggio). Lo "0" indica di riempire con zeri, 10 indica di usare come minimo 10 caratteri.

    Questo è niente, è solo un assaggio. La formattazione delle stringhe può formattare molte altre cose e in maniera anche più sofisticata.

    Il consiglio (lo ripeto, lo so) è di leggere la documentazione: https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/Formatter.html
  • Re: System.out.printf [risolto]

    Grazie sei un grande
Devi accedere o registrarti per scrivere nel forum
2 risposte