lunes, 2 de febrero de 2015

4- PrintStream y manejo de cadenas


Bienvenidos a la cuarta entrega de tutoriales en Java, en la última entrega habíamos dejado algunas cosas en continuará, por lo tanto vamos a seguir con lo que veníamos viendo.


Estas leyendo la serie de tutoriales de Java. Lee más acerca de esta serie.


La clase PrintStream

Casi al final de la última entrega habíamos hablado de una clase PrintStream, seguramente se seguirán preguntando que es una clase, y nuevamente diré que más adelante lo veremos. Por el momento vamos a decir, aunque no sea así, pero para que tengan una idea, que una clase es como un archivito que contiene métodos (y atributos), que podemos utilizar.

Uno de los métodos que nos brinda PrintStream es "println();" y por ahora debemos saber que para usar métodos de esta clase lo podemos hacer mediante "System.out." seguido del método que queramos.

El método print

El método print muestra por pantalla lo que le pasemos por parámetro sin salto de línea, esto quiere decir que si hacemos lo siguiente:

System.out.print("Hola ");
System.out.print("Mundo");
Por consola veremos "Hola Mundo", en una sola línea. Si queremos usar el método print y mostrar mensajes en varias líneas tenemos que usar la secuencia de escape "\n", al igual que se hace en el lenguaje C.

System.out.print("Hola \n");
System.out.print("Mundo");
Si vamos a la documentación de Oracle sobre la librería PrintStream, y buscamos el método print, podemos ver lo siguiente:



Vamos a interpretar esto. A la izquierda tenemos lo que devuelve el método print, que en todos los casos es void, por lo cual no devuelve ningún tipo de dato, y a la derecha tenemos el método en sí, con los parámetros que admite el mismo, y abajo una descripción de lo que hace.

¿Porqué esta escrita tantas veces la función?. Bueno esta escrita tantas veces porque admite distintos valores como parámetros de entrada, y esto tiene que ver con la sobrecarga de métodos, cosa que veremos en otra entrega. Lo que quiere decir esto es que a la función print admite como parámetros valores booleanos, caracteres, de coma flotante, enteros, de tipo Object, y cadenas.

Por lo cual podemos hacer

int entero = 9;

System.out.print("Hola mundo esto es una cadena\n");
System.out.print(5);
System.out.print("\nHola estoy combinando una cadena con un entero cuyo valor es " + entero); 

Si ejecutamos el código veremos por consola lo siguiente:



Y de esta manera, podemos escribir cadenas, enteros, como también la combinación de estos tipos de datos.

Concatenación de cadenas

Ya que estamos de paso, vamos a explicar la concatenación de cadenas en Java. Como se puede apreciar en el ejemplo anterior se puede concatenar tipos de datos con el operador "+", para los que hayan programado en C o C++ quizás recuerden que para mostrar un entero luego de una cadena tenían que hacer algo como lo siguiente:

int numero = 5;
printf("El numero que quiero mostrar es: %d", numero);

Y si queriamos concatenar cadenas teníamos que recurrir a funciones como strcat

int main(int argc, char *argv[])
{
   
   char src[50], dest[50];

   strcpy(src,  "Esta es la cadena original");
   strcpy(dest, "Esta es la cadena destino");

   strcat(dest, src);
   
   printf("Cadena final : |%s|\n\n", dest);

  system("PAUSE"); 
  return 0;
  
}


Con el ejemplo anterior visualizamos por consola algo como esto:



En el caso de java se puede hacer con el operador "+" como se mostró anteriormente, veamos unos ejemplos:

String cadena1, cadena2;
cadena1 = "Esta es mi primer cadena";
cadena2 = "Esta es mi segunda cadena";
int numero = 10;

System.out.print(cadena1 + cadena2 + "\n");
String cadena3 = cadena1 + cadena2;
System.out.println(cadena3);
System.out.println("Hola esta es la cadena1" + cadena1 + " y esto es un nuúmero " + numero);
String nombre = "Diego";
String apellido = "García";
String mensaje = "Hola ";
mensaje += nombre + " " + apellido;
System.out.println(mensaje);

En este caso si ejecutamos el código veremos por consola lo siguiente:




Otra cosa que podrán observar es que las cadenas las definimos como tipo "String" y para asignarle algún valor simplemente lo hacemos con el operador "=", en el ejemplo anterior se detallaron varios casos para que quede claro.

El método println

Volviendo al tema anterior, hemos visto que el método "print" sirve para mostrar valores por consola siempre en la misma línea, excepto que usemos "\n". Otro método que nos ofrece la clase PrintStream es el método "println", el cual imprime valores en la consola y cada vez que se llama a este método produce un salto de línea. Si vamos a la documentación de Oracle al igual como hicimos para el método print podremos encontrar el método println y se verá algo así:



Como podemos ver es casi idéntico al método print, con la salvedad de que println admite que no se le pase ningún parámetro y esto producirá un salto de línea.

El método printf

Finalmente para los nostálgicos del C y C++ PrintStream incluye el tan amado método por algunos, el método "printf", en donde la f refiere a "formato", esto quiere decir que podemos mostrar valores por la consola con el formato que le indiquemos. 

Para escribir algo con formato lo podemos hacer de la siguiente manera:

int numero = 5;
double decimal = 2.4;
String cadena = "cadena";

System.out.printf("Esto es una %s que contiene el número entero %d y el decimal %f",cadena,numero,decimal);

Lo que mostrará por consola lo siguiente:




Generalmente este método se usa cuando queremos mostrar un número del tipo float o double, con determinada cantidad de decimales, ya que si utilizamos print o printf, Java lo mostrará con un formato por defecto.

Si java muestra un error con el texto  "The method printf(String, Object[]) in the type PrintStream is not applicable for the arguments (String, String, int, double)", no se alarmen, en la siguiente entrega veremos como solucionarlo.

Otra manera para no escribir System.out

Aclaración: Al igual que la aclaración que se hizo en la entrega anterior, esta parte puede que no todos la entiendan ya que tiene conceptos de objetos, cosa que todavía no explicamos, por lo que, si el lector no lo entiende, no se preocupe, no es algo relevante, y más adelante cuando se vea objetos, podrá volver a esta parte y verá como se entiende. 

A raíz de la entrega anterior en donde hablamos diferentes maneras de simplificar trabajo cuando teníamos que escribir System.out.println(); y aprovechando que abordamos el tema de la clase PrintStream, vamos a mostrar otra manera para acortar o facilitar la manera de escribir esto.

Para ello debemos crear una variable del tipo PrintStream, inicializarla el método main o constructor de nuestra clase principal, y una vez hecho esto podremos acceder a las funciones para mostrar valores por consola.

import java.io.PrintStream;

public class main {
 
 private static PrintStream ps;

 public static void main(String[] args) {  

   ps = new PrintStream(System.out);
   
   ps.println("Hola Mundo");  
  
 }
}

Tip: Atajos en Eclipse

Muchas veces Java nos marcará error porque nos falta importar alguna librería, para visualizar esto, vamos a borrar la linea import java.io.PrintStream; y veremos como nos subraya en rojo la palabra PrintStream.




Esto es porque para trabajar con esta clase debemos importarla, y la realidad es que no nos vamos a acordar todas las librerías que necesitemos importar, por lo tanto si no nos acordamos de que en el principio del programa hay que escribir import java.io.PrintStream; podemos recurrir a dos técnicas o métodos.

El primer método consiste en posicionar el puntero del mouse sobre la palabra PrintStream y veremos como nos sale una lista de sugerencias.


Hacemos click en "Import 'PrintStream' (java.io)" y Java se encargara de importar la librería para que podamos trabajar. 

El segundo método es todavía más fácil, consiste en ubicar el cursor en la palabra PrintStream, y presionar la combinación de teclas Ctrl + Shift + O, veremos como automáticamente Java importa la librería necesaria para que podamos trabajar.

Si quieres puedes descargar el código de ésta entrega haciendo clic acá:


Por hoy es suficiente, la próxima entrega veremos más detalladamente el tema de texto con formato y las secuencias de escape de Java.




4
5
Entrega siguiente
Pablo Ezequiel Jasinski Programador y músico

Actual docente en el área de programación y análisis de sistemas, he empezado desarrollando juegos en Flash y Borland C como freelance. Actualmente orientado a plataformas móviles y webs a través de Java

No hay comentarios :

Publicar un comentario