Formatear los datos de salida con String.format

Cómo dar formato a los datos utilizando el método format de String

La clase Formatter proporciona el método format para dar formato a los datos contenidos en un String.

La sintaxis para dar formato a los datos es similar al de printf pero en lugar de mostrarla por pantalla, la cadena formateada se asigna a un String.

Veamos varios ejemplo de uso de format para mostrar datos con formato por pantalla

Ejemplo 1: String que contiene dos números de tipo double con dos cifras decimales

double a = 1.23503689, b = 67.33420191;
String cadena = String.format("a = %.2f b = %.2f", a, b);                                                         
System.out.println("Números introducidos -> " + cadena);

Salida:

Números introducidos -> a = 1,24 b = 67,33     

Ejemplo 2: Obtener cuatro String con los valores contenidos en las variables de tipo int x, y, z, k con formatos diferentes.

En el primero String el valor de x ocupará 10 caracteres se mostrará alineado a la izquierda y además se mostrará el signo del número (+ si es positivo o - si es negativo).

En el segundo String el valor de y se mostrará aplicando el mismo formato que para el valor de x.

En el tercer String el valor de z ocupará 10 caracteres y se mostrará el signo del número (+ si es positivo o - si es negativo). Si el tamaño total del número es menor que los 10 caracteres se rellena con ceros.

En el cuarto String el valor de k se muestra utilizando el mismo formato que se ha aplicado a la variable z.

Salida:

x -> |+7        |     
y -> |-123056   |
z -> |+000000559|
k -> |-000099311|

Ejemplo 3: Obtener un String con la fecha y hora del sistema en formato:

nombreDia dd de nombreMes de YYYY hh:mm:ss AM/PM

LocalDateTime ahora = LocalDateTime.now();
String fecha = String.format("%tA %<td de %<tB de %<tY %<tr", ahora);                                 
System.out.println(fecha);

Salida:

jueves 04 de febrero de 2021 05:21:12 PM     

Formatear números en Java con la clase DecimalFormat

Con la clase DecimalFormat podemos dar formato a los números a partir de un patrón determinado.

Un patrón es un String que contiene el formato que queremos dar al número.

Un ejemplo de patrón puede ser este:

String dosDecimalesConSeparador = "#,###.##";   

Este patrón está indicando que los números se representarán con dos decimales y además contendrán el separador de miles.

Veamos a continuación una serie de ejemplos de uso de la clase DecimalFormat para dar formato a valores numéricos y mostrarlos formateados por pantalla

Ejemplo 1: formatear un número de tipo double para que se muestre con dos decimales y con el punto separadores de miles.

double n = 5589625.5;
String patron = "#,###.##";
DecimalFormat formato = new DecimalFormat(patron);                                                                
System.out.println(formato.format(n));

Salida:

5.589.625,5   

Aunque en el patrón hemos indicado que el número se muestre con dos decimales, solo obtenemos uno ya que el número solo tiene un decimal. El carácter # indica que en esa posición va una cifra pero no de forma obligatoria como en este caso.

Si queremos mostrar siempre dos decimales debemos sustituir el carácter # por el carácter 0:

double n = 5589625.5;
String patron = "#,###.00";
DecimalFormat formato = new DecimalFormat(patron);                                                                
System.out.println(formato.format(n));

Salida:

5.589.625,50     

Ejemplo 2: formatear dos números de tipo double para que se muestren por pantalla con dos decimales y sin el separador de miles.

double n = 5589625.5;
double m = 0.332;
String patron = "#.00";
DecimalFormat formato = new DecimalFormat(patron);                                                                
System.out.println(formato.format(n));                                                                            
System.out.println(formato.format(m));

Salida:

5589625,50     
,33

Con este patrón, si la parte entera del número es 0 no se muestra. Para que salga debemos sustituir el carácter # por el carácter 0.

double n = 5589625.5;
double m = 0.332;
String patron = "0.00";
DecimalFormat formato = new DecimalFormat(patron);                                                                
System.out.println(formato.format(n));
System.out.println(formato.format(m));

Salida:

5589625,50     
0,33

Ejemplo 3: En este ejemplo veremos como indicar el número de cifras de la parte entera del número rellenando con ceros las cifras que falten. Se formatean dos números de tipo double para que se muestren por pantalla con tres decimales, sin el separador de miles y además que la parte entera se muestre con 9 cifras. Si la parte entera del número tiene menos de 9 cifras se completará con ceros.

double n = 5589625.5;
double m = 0.3389;
String patron = "000000000.000";
DecimalFormat formato = new DecimalFormat(patron);                                                                
System.out.println(formato.format(n));
System.out.println(formato.format(m));

Salida:

005589625,500     
000000000,339

Ejemplo 4: En este ejemplo veremos como indicar que el número se muestre en notación exponencial. Se da formato a dos números de tipo double para que se muestren por pantalla con tres decimales y a continuación la letra E seguida del valor del exponente que se mostrará con dos cifras. Además la parte entera del número se mostrará con dos cifras.

double n = 5589625.5;
double m = 0.3389;
String patron = "00.000E00";
DecimalFormat formato = new DecimalFormat(patron);                                                                
System.out.println(formato.format(n));
System.out.println(formato.format(m));

Salida:

55,896E05     
33,890E-02

Introducir datos utilizando la interfaz gráfica

 

Cómo introducir datos al programa mediante la interfaz gráfica

La lectura de datos utilizando la interfaz gráfica se realiza mediante la clase JOptionPane.

La clase JOptionPane se encuentra en el paquete javax.swing por lo tanto se debe incluir al inicio del programa la instrucción:

import javax.swing.JOptionPane;      

Con la clase JOptionPane se crean ventanas de diálogo estándar para que el usuario introduzca datos al programa y también ventanas de información.

Ejemplo: programa que pide al usuario que introduzca su nombre y a continuación muestra el nombre introducido.

import javax.swing.JOptionPane;
public class EjemploJOptionPane {
     public static void main( String[] args ){
         String nombre = "";
         nombre = JOptionPane.showInputDialog("Escribe tu nombre");                                               
         String msg = "Hola " + nombre + "!";
         JOptionPane.showMessageDialog(null, msg);                                                                
     }
}

La instrucción:

nombre = JOptionPane.showInputDialog("Escribe tu nombre");    

crea una ventana de entrada de datos que muestra un diálogo con un mensaje, un campo de texto y dos botones (Aceptar, Cancelar).

La cadena de caracteres que escribe el usuario se asignará a la variable nombre.

La instrucción:

String msg = "Hola " + nombre + "!";                    

forma un String con el mensaje a mostrar, que se almacena en la variable msg.

La instrucción:

JOptionPane.showMessageDialog(null, msg);                    

muestra una ventana de información que contiene el mensaje (variable msg) y un botón de Aceptar.

Debemos tener en cuenta que los datos introducidos de esta forma son siempre de tipo String. Aunque se introduzcan valores numéricos, JOptionPane devuelve lo introducido como un String. Por lo tanto para trabajar con valores numéricos se debe pasar la cadena de caracteres introducida al tipo de dato correspondiente.

Ejemplo: Programa que lee por teclado dos números enteros y calcula y muestra su suma.

import javax.swing.JOptionPane;
public class Ejemplo2JOptionPane {
   public static void main(String[] args){
        //declaraciones de variables
        int n1, n2, suma;
        String cadena;
        //leer el primer número
        cadena = JOptionPane.showInputDialog(null, "Introduce el primer número entero");                          
        n1 = Integer.parseInt(cadena); //obtener el int a partir del String cadena
        //leer el segundo número
        cadena = JOptionPane.showInputDialog(null, "Introduce el segundo número entero");                         
        n2 = Integer.parseInt(cadena);  //obtener el int a partir del String cadena
        
        suma = n1 + n2;
        
        //mostrar resultados
        JOptionPane.showMessageDialog(null, "Ha introducido los números " + 
                                             n1 + " y " + n2 + "\nSuma: " + suma);
   }
}

El método Integer.parseInt(cadena); es el encargado de convertir en int el String contenido en la variable cadena

Después de introducir los datos por teclado, se convierten a int, se suman y finalmente se muestran los números introducidos y el resultado de la suma:


 

Puedes consultar todas las posibilidades que ofrece la clase JOPtionPane: en este enlace:

https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html 


Leer un char por teclado en Java

Cómo leer un carácter desde teclado en Java

La clase Scanner NO CONTIENE un método nextChar() para leer un dato de tipo char desde teclado.

Si queremos leer un solo carácter desde teclado podemos hacerlo de dos formas:

  • Utilizando el método next() o nextLine()  de Scanner.
  • Ulilizando el método System.in.read(); Este método no pertenece a la clase Scanner.

Ejemplo 1: Programa Java que lee un carácter por teclado y lo muestra por pantalla utilizando el método next.

import java.util.Scanner;
public class EjemploLecturaChar {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char caracter; 
        System.out.print("Introduce un carácter: ");
        caracter = sc.next().charAt(0);  //se obtiene el primer carácter del String introducido por teclado       
        System.out.println("Carácter introducido -> " + caracter);                                                
    }
}

El método next() extrae del buffer el siguiente token en forma de String. A partir de este String podemos obtener su primer carácter mediante el método charAt(0).

Ejemplo 2: Programa Java que lee un carácter por teclado y lo muestra por pantalla utilizando el método System.in.read().

public class EjemploLecturaChar {
       public static void main(String[] args) throws IOException {                                                
              char caracter;
              System.out.print("Introduce un carácter: ");
              caracter = (char)System.in.read();
              System.out.println("Carácter introducido -> " + caracter);                                          
       }
}

Este método read() devuelve un int correspondiente al código del carácter introducido por teclado. Por eso es necesario realizar la conversión a tipo char antes de hacer la asignación a la variable carácter.


 
El método System.in.read() puede lanzar una excepción por lo que hay que añadir en la cabecera del método main lo siguiente: throws IOException
public static void main(String[] args) throws IOException {