
L'objectiu d'aquest CodeLab és aprendre el mètodes que ofereix JAVA per a la formatació de text.
Veurem com podem controlar l'espai que ocupa un valor quan s'imprimeix, els digits que ha d'ocupar, i per últim el color que ha de tenir.
Desenvoluparem una petita aplicació per a generar tíquets d'una botiga.
Inicia IntelliJ i crea un nou projecte anomenat



Els mètodes
Aquests mètodes permeten especificar el format que ha de tenir un text.
Entre els aspectes més importants de la formatació trobem, l'espaiat, l'alineació i el nombre de decimals.
Vegem un exemple:
public class Main { public static void main(String[] args) { String text = "hello"; int numero = 1234; float decimal = 56.789f; System.out.format("%10s", text); System.out.format("%10d", numero); System.out.format("%10f", decimal); System.out.println(); System.out.println(); System.out.format("%-10s", text); System.out.format("%-10d", numero); System.out.format("%-10f", decimal); System.out.println(); System.out.println(); System.out.format("%-10.2f%10.2f", decimal, decimal); } }
Observa com s'ha formatat el text de sortida:
hello 1234 56,789001 hello 1234 56,789001 56,79 56,79
El significat dels especificadors és el següent:
String amb una amplada de 10 caracters | |
Enter amb una amplada de 10 caracters | |
Float amb una amplada de 10 caracters | |
String amb una amplada de 10 caracters, aliniat a l'esquerra | |
Enter amb una amplada de 10 caracters, aliniat a l'esquerra | |
Float amb una amplada de 10 caracters, aliniat a l'esquerra | |
Float amb una amplada de 10 caracters, aliniat a l'esquerra, i amb dos decimals | |
Float amb una amplada de 10 caracters, amb dos decimals |
Podem generalitzar els especificadors així:
% alineació amplada decimals tipus
Dintre de la cadena de format podem posar-hi també altres caracters que desitjem que es mostrin:
System.out.format("|%-10s|%10d|%10.2f|", text, enter, decimal);
Un truc interessant és utilitzar el format per a repetir espais en blanc:
System.out.format("hola%10smon","");
El mètode
Aquest mètode no imprimeix per pantalla el resultat de la formatació, sinò que retorna el text resultant. Aquest text el podem utilitzar com ens convingui.
String textFormatat = String.format("|%-10s|%10d|%10.2f|", text, enter, decimal); System.out.println(textFormatat);
Similar al truc anterior, podem usar
String guions = String.format("%50s", "").replace(" ", "-"); System.out.println(guions);
Els terminals ANSI/VT100 no solament poden mostrar text en blanc i negre; també poden mostrar colors i formats gràcies a les seqüències d'escapament.
Les seqüències d'escapament per als colors i formats tenen el aquesta sintaxi:

On
Fem una prova:
public class Main { public static void main(String[] args) { System.out.println("\033[31mHello Red World!"); } }
Podem veure que la seqüencia d'escapament
Una altra prova:
System.out.println("\033[31;43;1mHello Red World!");
Aquesta vegada els atributs son el
Una última prova:
System.out.println("\033[31;43;4mHello Red World!");
Hem canviat el text en negreta per el text subratllat (atribut
Obre un terminal, i navega fins al directory de sortida del projecte:
Executa el programa:
Ara sí hauria de sortir el text subratllat...
A més a més veuras que a partir d'una seqüència d'escapament, tot el text següent manté el color i format, així que si volem tornar al color "per defecte" (blanc i negre), haurem de resetejar el color i format (attribut
System.out.println("\033[31;43;4mHello Red World!\033[0m");
A continuació podem veure una taula amb els tots els codis dels atributs que podem utilitzar per a canviar el format, el color de fons, i el color del text:
Set
Codi | Descripció | Exemple | Previsualització |
1 | Bold/Bright |
| |
2 | Dim |
| |
4 | Underlined |
| |
5 | Blink |
| |
7 | Reverse |
| |
8 | Hidden |
|
Reset
Codi | Descripció | Exemple | Previsualització |
0 | Reset all attributes |
| |
21 | Reset bold/bright |
| |
22 | Reset dim |
| |
24 | Reset underlined |
| |
25 | Reset blink |
| |
27 | Reset reverse |
| |
28 | Reset hidden |
|
Codi | Color | Exemple | Previsualització |
39 | Default |
| |
30 | Black |
| |
31 | Red |
| |
32 | Green |
| |
33 | Yellow |
| |
34 | Blue |
| |
35 | Magenta |
| |
36 | Cyan |
| |
37 | Light gray |
| |
90 | Dark gray |
| |
91 | Light red |
| |
92 | Light green |
| |
93 | Light yellow |
| |
94 | Light blue |
| |
95 | Light magenta |
| |
96 | Light cyan |
| |
97 | White |
|
Codi | Color | Exemple | Previsualització |
49 | Default |
| |
40 | Black |
| |
41 | Red |
| |
42 | Green |
| |
43 | Yellow |
| |
44 | Blue |
| |
45 | Magenta |
| |
46 | Cyan |
| |
47 | Light gray |
| |
100 | Dark gray |
| |
101 | Light red |
| |
102 | Light green |
| |
103 | Light yellow |
| |
104 | Light blue |
| |
105 | Light magenta |
| |
106 | Light cyan |
| |
107 | White |
|
import java.time.LocalDateTime; class Producte { String descripcio; float pes; float pvp; } public class Main { private static final String NOM_BOTIGA = "Tuttifrutti S.L."; private static final float IVA = 0.21f; public static void main(String[] args) { Producte[] productes = new Producte[4]; // Afegim productes a la llista productes[0] = new Producte(); productes[0].descripcio = "Poma"; productes[0].pes = 10.49f; productes[0].pvp = 1.23f; productes[1] = new Producte(); productes[1].descripcio = "Maduixa"; productes[1].pes = 0.5f; productes[1].pvp = 14.99f; productes[2] = new Producte(); productes[2].descripcio = "Kiwi"; productes[2].pes = 0.829f; productes[2].pvp = 2.49f; productes[3] = new Producte(); productes[3].descripcio = "Taronja"; productes[3].pes = 12.1f; productes[3].pvp = 0.99f; // Imprimim el tiquet, calculant al mateix temps l'import total float baseImponible = 0; System.out.printf("%s%n",NOM_BOTIGA); System.out.printf("Data: %tD%n", LocalDateTime.now()); System.out.println(); System.out.printf("%-12s%8s%8s%8s%n", "DESCRIPCIO", "PES", "PVP", "IMPORT"); System.out.println(String.format("%36s", "").replace(" ", "-")); for (int i = 0; i < productes.length; i++) { float importProducte = productes[i].pes*productes[i].pvp; baseImponible += importProducte; System.out.printf("%-12s%8.2f%8.2f%8.2f%n", productes[i].descripcio, productes[i].pes, productes[i].pvp, importProducte); } System.out.println(String.format("%36s", "").replace(" ", "-")); System.out.printf("%29s%6.2f€%n", "BASE IMPONIBLE", baseImponible); System.out.printf("%29s%6.0f%%%n", "IVA", IVA*100); System.out.printf("%29s%6.2f€%n", "TOTAL", baseImponible + baseImponible*IVA); System.out.println(); System.out.printf("%30s%n", "GRACIES PER LA SEVA VISITA"); System.out.printf("%22s%n", "IVA INCLOS"); } }
