2013-05-16 3 views
8

C'è qualche differenza in questi quattro modi di formattare gli stessi dati?Tanti modi per formattare gli stessi dati

// Solution 1 
    System.out.printf("%.1\n",10.99f); 

    // Solution 2 
    System.out.format("%.1\n",10.99f); 

    // Solution 3 
    System.out.print(String.format("%.1\n",10.99f)); 

    // Solution 4 
    Formatter formatter = new Formatter(); 
    System.out.print(formatter.format("%.1\n",10.99f)); 
    formatter.close(); 

risposta

1

System.out è un PrintStream Per dettaglio segui questo link: Details about various format

Una chiamata di questo metodo di forma

out.printf(Locale l, String format,Object... args)

si comporta esattamente nello stesso modo come l'invocazione

out.format(Locale l,String format,Object... args)

Quindi 1 & 2 sono uguali non c'è alcuna differenza in bianco e nero. e 3 & 4 sono quasi stessa unica differenza il tempo di compilazione sarà lì se confrontato con 1 & 2.

0

tenendo conto che String.format() chiamate new Formatter().format() e PrintWriter.printf() chiamate quasi la stessa cosa ci dovrebbe essere alcuna differenza.

0

System.out.printf(), System.out.format() sono metodi di PrintStream. Sono equivalenti.

printf() visualizza la stringa appena formattata su System.out, mentre format() restituisce una nuova stringa formattata.

2

I primi due sono esattamente le stesse, dal printf viene implementato come (source)

public PrintStream printf(String format, Object ... args) { 
    return format(format, args); 
} 

Gli ultimi due sono anche esattamente lo stesso, poiché String.format viene implementato come (source)

public static String format(String format, Object ... args) { 
    return new Formatter().format(format, args).toString(); 
} 

Infine, il 2 ° e il 4 ° sono più o meno gli stessi, come si può vedere dall'implementazione di PrintStream.format (source). Sotto il cofano, crea anche un nuovo Formatter (se necessario) e chiama format su quello Formatter.

public PrintStream format(String format, Object ... args) { 
    try { 
     synchronized (this) { 
      ensureOpen(); 
      if ((formatter == null) 
       || (formatter.locale() != Locale.getDefault())) 
       formatter = new Formatter((Appendable) this); 
      formatter.format(Locale.getDefault(), format, args); 
     } 
    } catch (InterruptedIOException x) { 
     Thread.currentThread().interrupt(); 
    } catch (IOException x) { 
     trouble = true; 
    } 
    return this; 
}