Programación en castellano
Inicio > Tutoriales > Nuevo en Java > New 2 Java: Suplementos
-Tutoriales

New 2 Java: Suplementos


Suplemento Nº 4 de New 2 Java (Oct-2001)

. Lenguaje Java Básico

. Convertir un String a un Valor Numérico

Una necesidad común de los desarrolladores en Java es convertir Strings a valores numéricos. Una vez convertido, podemos manipular ese valor como cualquier otro dato primitivo (por ejemplo, un int, float, o double). El problema es que, cuando leemos desde un fichero, obtenemos un argumento de la línea de comandos, o sólo solicitamos una entrada desde un campo de texto en un formulario, siempre empezamos con un objeto String. Tratar este String como un tipo primitivo requiere un paso extra, la conversión.

Para convertir un String a un tipo primitivo, debemos entender cómo usar una clase envolvura. Todo tipo primitivo tiene asociada una clase envoltura. Estas clases nos permiten tratar a los tipos primitivos como objetos. Además, estas clases contienen métodos que permiten la manipulación de estos objetos, apropiados para el tipo de datos.

La siguiente lista muestra el mapeo entre el tipo primitivo y su clase envoltura. En casi todos los casos, la clase envoltura tiene el mismo nombre que el tipo de datos primitivo con la primera letra en mayúsculas.

byte - Byte
short - Short
int - Integer
long - Long
char - Character
float - Float
double - Double
boolean - Boolean

Cada una de estas clases envoltura (excepto la clase Character) tiene un método que nos permitie convertir desde un String al tipo primitivo específico. Simplemente llamando al método desde la clase envoltura apropidada, y nuestro String será convertido en un tipo primitivo. Por ejemplo:

String myString = "12345";
int myInt = Integer.parseInt(myString);

convierte el contenido de la variable String myString a un objeto myInt. La conversión es así de fácil. El único truco es que la converisón para cada tipo implica un único nombre de método en cada clase envoltura. Todas excepto las conversiones booleanas se hacen por métodos con nombres similares. Pero los nombres de los métodos son diferentes:

byte - Byte.parseByte(aString)
short - Short.parseShort(aString)
int - Integer.parseInt(aString)
long - Long.parseLong(aString)
float - Float.parseFloat(aString)
double - Double.parseDouble(aString)
boolean - Boolean.valueOf(aString).booleanValue();

Hay una excepción: la clase Character no tiene dicho método, por eso tenemos que preguntar al String por el carácter con el método charAt:

// The variable e is the character e in the string Hello
     String hello = "Hello";
     char e = hello.charAt(1);

Si el contenido del String no se puede convertir al tipo primitivo solicitado, se lanzará una NumberFormatException. Esta es una excepción de tiempo de ejecución, por lo que la conversión no tiene que estar en un bloque try-catch.

. Entender la Librería de Clases Java

. La Clase NumberFormat

Imprimir números en la pantalla puede producir algunos resultados no desados. Por ejemplo:

public class PrintNum {
    public static void main(String args[]) {
      double amount = 400000.00;
      System.out.println("He paid " + amount 
                           + " for the house.");
        }
}

resulta en:

He paid 400000.0 for the house.

Añadir el símbolo $ en el string no mejorará estos resultados porque los tipos primitivos se imprimen con el número máximo de dígitos distintos de cero para ese tipo, y las comas no están incluidas en el resultado.

Podemos controlar la forma de mostrar y ordenar entradas en el formato de salida necesario usando la clase abstracta NumberFormat del paquete java.text. Esta clase proporciona el interface para formatear y analizar números, e incluye métodos para determinar que localidades tienen formatos numéricos y cuáles son sus nombres. La clase tiene métodos para tres formatos estándards:

  • getInstance o getNumberInstance obtiene un formato para el formato de número normal, como 600,000.
  • getCurrencyInstance obtiene un formato para el formato de número monetario, como $600,000.00.
  • getPercentInstance obtiene un formato para mostrar porcentajes, como 56%

Para formatear un primitivo, empezamos devolviendo un objeto del tipo NumberFormat llamando a uno de los métodos de arriba. Para usar el ejemplo anterior para que muestre $400,000, llamamos a:

 
NumberFormat nf = NumberFormat.getCurrencyInstance();

Para asegurarnos de que la cantidad está formateada correctamente para un país específico, especificamos la localidad con:

NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);

Ahora, el program de arriba se puede reescribir como:

import java.text.*;
import java.util.Locale;

public class PrintNum {
  public static void main(String args[]) {
    // Amount to be formatted
    double amount = 400000.00; 
    // Returns an object of type NumberFormat
    NumberFormat nf = 
       NumberFormat.getCurrencyInstance(Locale.US);
    // Calls the format method on the NumberFormat object
    // to format the amount as desired and prints the 
    // results to the screen
     System.out.println("He paid " +  nf.format(amount)
                           + " for the house.");
        }
}

Resultando en:

He paid $400,000.00 for the house.

. Programa Ejercicio

Usa lo que has aprendido para crear una aplicación que lea argumentos desde la línea de comandos. Las reglas para manejar estos argumentos son éstas:

  • Si el argumento es un entero, añade el valor a la respuesta.
  • Si el argumento es un número en coma flotante, multiplica la respuesta por el valor.
  • Si no hay argumento, muestra el argumento inválido

Una vez procesados los argumentos, muestra el valor resultante como moneda, con el símbolo de la moneda, las comas para separar los miles (asumiendo la Localidad US), el punto decimal, y dos dígitos después del decimal. Cuando se ejecute con la siguiente línea de comando:

 
java Numbers 1 2 3 4 5 2.3 3 4 4444.4 a

Tu programa deebería presentar un resultado similar a este:

Arg: 10 invalid (a)
The answer is $184,442.60

. Un poco de Java

. AWT contra Swing

Un error común es pensar que el Project Swing es un reemplazo para el Abstract Window Toolkit (AWT). De hecho, Swing es un conjunto de componentes más ligeros construido sobre AWT.

Originalmente el AWT fue diseñado para crear interfaces sencillos para applets. Swing proporciona reemplazos para los componentes de peso pesado del AWT y también incluye herramientas comunmente utilizadas en interfaces de usuario más complejos.

Un componente de peso pesado trata con el sistema de ventanas de la plataforma local para determinar el aspecto y comportamiento de los componentes. Todo componente de peso pesado tiene un par en el paquete java.awt.peer que es el responsable de las interacciones entre el componente y la plataforma local, como Mac, Windows y Solaris para mostrar y manipular el objeto.

Por otro lado, un componente de peso ligero, está escrito completamente en lenguaje Java y no necesita un par nativo. Para conseguir el aspecto y comportamiento específico de una plataforma, podemos usar la arquiectura Pluggable Look and Feel de Swing y su API.

En programación de aplicaciones, los controladores de distribución del AWT proporcionan una:

  • Distribución para componentes organizados dentro de un panel.
  • Mecanismos de manejo de eventos para menejar la funcionalidad de los componentes AWT o Swing como botones, campos de texto o áreas de texto.

Para completar una aplicación compleja escrita en Java, necesitarás entender un poco sobre el AWT, y mucho sobre Project Swing.

. Solución al Programa de Ejercicio

Esta es una posible solución al Programa del Ejercicio:

import java.text.*;
import java.util.Locale;

public class Numbers {
    public static void main(String args[]) {

      // Initialize total
      double answer = 0;

      // Working variable
      double number;

      // Loop through all the command line args
      for (int i=0; i < args.length; i++) {

        try {

          // First try to convert arg to an int
          number = Integer.parseInt(args[i]);
          // Add to total if int
          answer += number;

        } catch (NumberFormatException intTry) {

          try {

            // Next try to convert arg to a double
            number = Double.parseDouble(args[i]);
            // Multiple to total if double
            answer *= number;

          } catch (NumberFormatException doubleTry) {

            // Display message if neither int nor double
            System.err.println("Arg: " + (i+1) +
              " invalid (" + args[i] + ")");

          }
        }
      }

      // Create a currency display format with Local included
      NumberFormat nf =
                  NumberFormat.getCurrencyInstance(Locale.US);

      // Display output as US currency format
      System.out.println("The answer is " + nf.format(answer));
    }
}

. Descargar la Plataforma Java 2

Para la mayoría del desarrollo Java, necesitas las librerías de clases Java, el compilador, las herramientas, y el entorno de ejecución proporcionado por el kit de desarrollo de Java 2, Standard Edition.

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados