Tipos De Datos En Java

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Tipos De Datos En Java as PDF for free.

More details

  • Words: 3,556
  • Pages: 20
FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007

INSTITUTO PROFESIONAL PROVIDENCIA ESCUELA DE TECNOLOGÍA E INFORMÁTICA

Conversión de tipos de datos en Java

14/10/yyyy

1

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007

Conversiones posibles entre los tipos de datos primitivos en Java, byte -> short -> int -> long -> float -> double char -> int -> long -> float -> double Tome la siguiente clase y pruebe la conversión entre los tipos de datos. // byte -> short -> int -> long -> float -> double // char -> int -> long -> float -> double class conversiontipos { public static void main(){ byte enterobit = 127; short enteroCorto = 0; int entero; long enteroLargo; float puntoFlotante; double decimal; char numeroCaracter = '9' ; // Conversiones entre números // Convierto de Byte a short enteroCorto = (short) enterobit; // Convierto de Short a int entero = (int) enteroCorto; // Convierto de int a long enteroLargo = (long) entero; // Convierto de long a float puntoFlotante = (float) enteroLargo; // Convierto de float a Double decimal = (double) puntoFlotante; // Conversiones desde char entero = (int) numeroCaracter; // Convierto de int a long enteroLargo = (long) entero; 14/10/yyyy

2

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 // Convierto de long a float puntoFlotante = (float) enteroLargo; // Convierto de float a Double decimal = (double) puntoFlotante;

}

} Formateo de Números y Monedas Los programas almacenan y operan con números de una forma independiente de la Localidad. Antes de mostrar o imprimir un número el programa debe convertirlo a un String que esté en un formato sensible a la Localidad. Por ejemplo, en Francia, el número 123456.78 debería ser formateado como 123 456,78, y en Alemania debería aparecer como 123.456,78. En esta lección, aprenderás como hacer que tus programas sean idependientes de las convenciones de la localidad para los puntos decimales, los separadores de millares, y otras propiedades de formateo. Utilizar Formatos Predefinidos Utilizando los métodos de factoría proporcionados por la clase NumberFormat, se pueden obtener formatos específicos de la localidad para números, monedas y porcentajes. Llamando a los métodos de la clase NumberFormat se pueden formatear números, monedas y porcentajes de acuerdo a la Localidad. Sin embargo, hay un error: NumberFormat podría no soportar la Localidad especificada. Para conocer las definiciones de Locale soportadas por NumberFormat, llamamos al método getAvailableLocales. Locale[] locales = NumberFormat.getAvailableLocales(); Si NumberFormat no soporta la localidad que necesitamos, podemos crear nuestro propio formateador. Explicaremos este procedimiento en la siguiente sección, Formatear con Patrones. El siguiente material muestra como obtener formateadores específicos de la localidad para números, monedas y porcentajes. Los códigos de ejemplo son de un programa llamado NumberFormatDemo.java. 14/10/yyyy

3

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 Números Se pueden utilizar los métodos de factoria de NumberFormat para formatear números de tipos de datos primitivos, como double, y sus correspondientes objetos, como Double. En el siguiente fragmento de código, formatearemos un Double de acuerdo a la Localidad. Primero, obtendrémos un ejemplar de NumberFormat específico de la Localidad, llamando a getNumberInstance. Luego llamamos al método format con el Double como argumento. El método format devuelve el número formateado en un String, que está listo para ser mostrado. Double amount = new Double(345987.246); NumberFormat numberFormatter; String amountOut; numberFormatter = NumberFormat.getNumberInstance(currentLocale); amountOut = numberFormatter.format(amount); System.out.println(amountOut + " " + currentLocale.toString()); La salida de este ejemplo muestra como el formato del mismo número varía con la Localidad. 345 987,246 fr_FR 345.987,246 de_DE 345,987.246 en_US Monedas Si estás escribiendo apliaciones de negocios, necesitarás formatear y mostrar valores en monedas. Las monedas se formatean de la misma forma que los números, excepto en que se llama a getCurrencyInstance para crear el formateador. Cuando se llama al método format , devuelve un String que incluye el número formateado y el signo de moneda apropiado. El siguiente código muestra como formatear moneda de una forma específica de la Localidad. Double currency = new Double(9876543.21); NumberFormat currencyFormatter; String currencyOut; currencyFormatter NumberFormat.getCurrencyInstance(currentLocale); 14/10/yyyy

=

4

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 currencyOut = currencyFormatter.format(currency); System.out.println(currencyOut + " " + currentLocale.toString()); La salida genera por las líneas precedentes sería esta. 9 876 543,21 F fr_FR 9.876.543,21 DM de_DE $9,876,543.21 en_US A primera vista, esta salida podría parecer errónea, porque los valores numéricos son iguales. Por supesto, 9 876 543,21 F no es equivalente a 9.876.543,21 DM. Sin embargo, recuerda que la clase NumberFormat no puede cambiar monedas. Los métodos pertenecientes a la clase NumberFormat formatean monedas, pero no las convierten. Porcentajes Támbien se pueden utilizar los métodos de la clase NumberFormat para formatear porcentajes. Para obtener el formateador específico de la localidad se llama al método getPercentInstance. Con este formateador, un fracción como 0.75 se mostrará como 75%. El siguiente código muetra como formatear porcentajes. Double percent = new Double(0.75); NumberFormat percentFormatter; String percentOut; percentFormatter = NumberFormat.getPercentInstance(currentLocale); percentOut = percentFormatter.format(percent); Formatear con Patrones Con la clase DecimalFormat se específica un formato de número con patrón. La clase DecimalFormatSymbols permite modificar los simbolos de formateo como separadores decimales o el signo negativo. Se puede utilizar la clase DecimalFormat para formatear números decimales en cadenas específicas de la Localidad. Esta clase permite controlar los ceros iniciales y finales, los sufijos y prefijos, separadores (millares), y el separador decimal. Si se quiere cambiar un símbolo del formateo como el saperador decimal, se puede utilizar DecimalFormatSymbols en conjunción con la clase DecimalFormat. Estas clases ofrecen una gran flexibilidad en el formateo de números, pero hacen el código más complejo. Siempre que sea posible, se debería

14/10/yyyy

5

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 utilizar la clase NumberFormat, que se describió en la sección anterior, en vez de DecimalFormat y DecimalFormatSymbols. Utilizando ejemplos, las siguientes líneas mostrarán como utilizar las clases DecimalFormat y DecimalFormatSymbols. Los fragmentos de código se han extraido de un programa llamado DecimalFormatDemo.java. Construir Patrones Las propiedades de formateo de DecimalFormat se específican con un String patrón. El patrón determina la apariencia del número formateado. Para una descripción completa de la síntaxis de los patrones puedes ver Síntaxis de los Patrones de Formateo de Números. En el siguiente ejemplo, hemos creado un formateador, pasándole un patrón al constructor de DecimalFormat. Luego, le hemos pasado un valor double al método format, que devuelve un String formateado. DecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(value); System.out.println(value + " " + pattern + " " + output); La salida de las líneas de código precedentes se describe en la siguiente tabla. El valor es el número, un double, que será formateado. El Patrón es el String que específica las propiedades de formateo. La Salida, que es un String, representa el número formateado. Valor Patrón 123456. ###,###.# 789 ##

123456. 789

123.78

12345.6 7

14/10/yyyy

Salida Explicación 123,456. El signo Almohadilla (#) indica 789 un dígito, la coma la posición del separador de millares y el punto la posición del separador decimal. ###.## 123456. El valor tiene tres dígitos a la 79 derecha del punto decimal, pero el patrón sólo tiene dos. El método format maneja esto redondeando. 000000.000 000123. El patrón específica relleno con 780 ceros, porque se utiliza el caracter Cero en vez de la almohadilla (#). $###,###.# $12,345. El primer carácter del patrón ## 67 es el signo del dólar ($). Observa que este signo precede 6

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007

12345.6 7

\u00a5###,# ##.###

¥12,345. 67

inmediatamente al dígito más a la izquierda de la salida formateada. El patrón específica el signo del Yen Japonés (¥) con su valor Unicode \u00a5.

Formateo Sensible a la Localidad El ejemplo anterior creaba un objeto DecimalFormat para la Localidad por defecto. Si se quiere un objeto DecimalFormat para una localidad distinta, se ejemplariza un NumberFormat y luego se fuerza a DecimalFormat. Entonces, el objeto DecimalFormat formetará los patrones definidos de una forma sensible a la localidad. Aquí se puede ver un ejemplo. NumberFormat nf = NumberFormat.getNumberInstance(loc); DecimalFormat df = (DecimalFormat)nf; df.applyPattern(pattern); String output = df.format(value); System.out.println(pattern + " " + output + " " + loc.toString()); Abajo podemos ver el resultado de la ejecución de este código. Los números formateados, en la segunda columna, varían con la Localidad. ###,###.### 123,456.789 en_US ###,###.### 123.456,789 de_DE ###,###.### 123 456,789 fr_FR Por eso, los patrones de formateo que hemos utilizado hasta ahora seguían las convenciones del Inglés Norteamericano. Por ejemplo, en el patrón "###,###.##" la coma es el separador de millares y el punto representa el punto decimal. Esta convención está bien, sabiendo que los usuarios finales no están expuestos a ellas. Sin embargo, algunas aplicaciones, como las hojas de cálculo y los generadores de informes, permiten al usuario final definir sus propios patrones de formateo. Para esas aplicaciones, los patrones de formateo especificados por el usuario final deberían utilizar la notación localizada. En estos casos querremos llamar al método applyLocalizedPattern sobre el objeto DecimalFormat. Modificar los Símbolos de Formateo Con la clase DecimalFormatSymbols se pueden modificar los símbolos que aparecen en los números formateados porducidos por el método format. Estos símbolos incluyen el punto decimal, el separador de 14/10/yyyy

7

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 millares, el signo menos, y el signo de porcentaje además de algunos más. En el siguiente ejemplo podemos ver el uso de DecimalFormatSymbols aplicando un formato inusual a un número. Empezamos ejemplarizando DecimalFormatSymbols sin argumentos, lo que devuelve un objeto para la Localidad por defecto, (Como DecimalFormatSymbols es una clase sensible a la Localidad, podríamos haber específicado una Localidad cuando llamamos al constructor.) Luego, modificamos el separador decimal y el de millares. Luego específicamos el DecimalFormatSymbols cuando ejemplarizamos la clase DecimalFormat. Sólo para hacer las cosas más complicadas, cambiamos la numero de agrupamiento del formateador de tres a cuatro. Finalmente llamamos al método format. Aquí tienes el código de Ejemplo. DecimalFormatSymbols unusualSymbols DecimalFormatSymbols(); unusualSymbols.setDecimalSeparator('|'); unusualSymbols.setGroupingSeparator('^'); String strange = "#,##0.###"; DecimalFormat weirdFormatter = unusualSymbols); weirdFormatter.setGroupingSize(4);

new

=

new

DecimalFormat(strange,

String bizarre = weirdFormatter.format(12345.678); System.out.println(bizarre); Esto es lo que aparecerá cuando imprimamos este extraño número formateado 1^2345|678 Síntaxis de los Patrones de Formateo de Números Se pueden diseñar patrones personalizados para el formateo de números, siguiendo las siguientes reglas específicas por el diagrama BNF. patrón := subpatrón{;subpatrón} subpatrón := /javaentero{.fracción}{sufijo} prefijo := '\\u0000'..'\\uFFFD' - CaracteresEspeciales sufijo := '\\u0000'..'\\uFFFD' - CaracteresEspeciales entero := '#'* '0'* '0' 14/10/yyyy

8

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 fracción := '0'* '#'* La notación utilizada en el diagrama anterior se explica en la siguiente tabla. Notaci Descripción ón X* 0 o más ejemplares de X (X | XoY Y) X..Y cualquier caracter de X a Y, inclusives S-T Los caracteres que estén en S, exceptos los que estén en T {X} X es opcional En el digrama BNF anteiror, el primer subpatrón especifica el formato para números positivos. El segundo es opcional, específica el el formato para números negativos. Aunque no está en el diagrama BNF, puede aparecer una coma dentro de la porción "entero". Dentro de los subpatrones, se específica el formato con símbolos especiales. Esto símbolos se describen en esta tabla. Símbo Descripción lo 0 Un dígito # Un dígito, se muestra 0 si no existe . Situación del separador decimal , Situación del separador de millares E Separa el exponente y la mantisa para formatos exponenciales ; Separa formatos Prefijo negativo por defecto % Multiplica por 100 y lo muestra como porcentaje ? Multiplica por 1000 y lo muestra como por mil ¤ signo de moneda, reemplazado por un símbolo de moneda; Si es doble, reemplazado por el símbolo de moneda internacional; si está presente en el patrón, se utiliza el separador decimal monetario en vez de el separador decimal. X Se puede utilizar cualquier otro caracter como prefijo o sufijo ' utilizado para enmarcar caracteres especiales en prefijos o sufijos.

14/10/yyyy

9

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007

Clase String Los strings u objetos de la clase String se pueden crear explícitamente o implícitamente. Para crear un string implícitamente basta poner una cadena de caracteres entre comillas dobles. Por ejemplo, cuando se escribe System.out.println("El primer programa");

Java crea un objeto de la clase String automáticamente. Para crear un string explícitamente escribimos String str=new String("El primer programa");

También se puede escribir, alternativamente String str="El primer programa";

Para crear un string nulo se puede hacer de estas dos formas String str=""; String str=new String();

Un string nulo es aquél que no contiene caracteres, pero es un objeto de la clase String. Sin embargo, String str;

está declarando un objeto str de la clase String, pero aún no se ha creado ningún objeto de esta clase.

14/10/yyyy

10

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007

Cómo se obtiene información acerca del string Una vez creado un objeto de la clase String podemos obtener información relevante acerca del objeto a través de las funciones miembro. Para obtener la longitud, número de caracteres que guarda un string se llama a la función miembro length. String str="El primer programa"; int longitud=str.length();

Podemos conocer si un string comienza con un determinado prefijo, llamando al método startsWith, que devuelve true o false, según que el string comience o no por dicho prefijo String str="El primer programa"; boolean resultado=str.startsWith("El");

En este ejemplo la variable resultado tomará el valor true. De modo similar, podemos saber si un string finaliza con un conjunto dado de caracteres, mediante la función miembro endsWith. String str="El primer programa"; boolean resultado=str.endsWith("programa");

Si se quiere obtener la posición de la primera ocurrencia de la letra p, se usa la función indexOf. String str="El primer programa"; int pos=str.indexOf('p');

Para obtener las sucesivas posiciones de la letra p, se llama a otra versión de la misma función pos=str.indexOf('p', pos+1);

El segundo argumento le dice a la función indexOf que empiece a buscar la primera ocurrencia de la letra p a partir de la posición pos+1. Otra versión de indexOf busca la primera ocurrencia de un substring dentro del string. String str="El primer programa";

14/10/yyyy

11

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 int pos=str.indexOf("pro");

Vemos que una clase puede definir varias funciones miembro con el mismo nombre pero que tienen distinto número de parámetros o de distinto tipo.

14/10/yyyy

12

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007

Comparación de strings La comparación de strings nos da la oportunidad de distinguir entre el operador lógico == y la función miembro equals de la clase String. En el siguiente código String str1="El lenguaje Java"; String str2=new String("El lenguaje Java"); if(str1==str2){ System.out.println("Los mismos objetos"); }else{ System.out.println("Distintos objetos"); } if(str1.equals(str2)){ System.out.println("El mismo contenido"); }else{ System.out.println("Distinto contenido"); }

Esta porción de código devolverá que str1 y str2 son dstintos objetos pero con el mismo contenido. str1 y str2 ocupan posiciones distintas en memoria pero guradan los mismos datos. Cambiemos la segunda sentencia y escribamos String str1="El lenguaje Java"; String str2=str1; System.out.prinln("Son el mimso objeto "+(str1==str2);

Los objetos str1 y str2 guardan la misma referencia al objeto de la clase String creado. La expresión (str1==str2) devolverá true. Asñi pues, el método equals compara un string con un objeto cualquiera que puede ser otro string, y devuelve true cuando dos strings son iguales o false si son distintos. String str="El lenguaje Java"; boolean resultado=str.equals("El lenguaje Java");

La variable resultado tomará el valor true. La función miembro comapareTo devuelve un entero menor que cero si el objeto string es menor (en orden alfabético) que el string dado, cero si son iguales, y mayor que cero si el objeto string es mayor que el string dado. String str="Tomás"; int resultado=str.compareTo("Alberto");

14/10/yyyy

13

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 La variable entera resultado tomará un valor mayor que cero, ya que Tomás está después de Alberto en orden alfabético. String str="Alberto"; int resultado=str.compareTo("Tomás");

La variable entera resultado tomará un valor menor que cero, ya que Alberto está antes que Tomás en orden alfabético.

Extraer un substring de un string En muchas ocasiones es necesario extraer una porción o substring de un string dado. Para este propósito hay una función miembro de la clase String denominada substring. Para estraer un substring desde una posición determinada hasta el final del string escribimos String str="El lenguaje Java"; String subStr=str.substring(12);

Se obtendrá el substring "Java". Una segunda versión de la función miembro substring, nos permite extraer un substring especificando la posición de comienzo y la el final. String str="El lenguaje Java"; String subStr=str.substring(3, 11);

Se obtendrá el substring "lenguaje". Recuérdese, que las posiciones se empiezan a contar desde cero.

Convertir un número a string Para convertir un número en string se emplea la función miembro estática valueOf (más adelante explicaremos este tipo de funciones). int valor=10; String str=String.valueOf(valor);

La clase String proporciona versiones de valueOf para convertir los datos primitivos: int, long, float, double.

14/10/yyyy

14

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 Esta función se emplea mucho cuando programamos applets, por ejemplo, cuando queremos mostrar el resultado de un cálculo en el área de trabajo de la ventana o en un control de edición.

Convertir un string en número Cuando introducimos caracteres en un control de edición a veces es inevitable que aparezcan espacios ya sea al comienzo o al final. Para eliminar estos espacios tenemos la función miembro trim String str=" 12 "; String str1=str.trim();

Para convertir un string en número entero, primero quitamos los espacios en blanco al principio y al final y luego, llamamos a la función miembro estática parseInt de la clase Integer (clase envolvente que describe los números enteros) String str=" 12 "; int numero=Integer.parseInt(str.trim());

Para convertir un string en número decimal (double) se requieren dos pasos: convertir el string en un objeto de la clase envolvente Double, mediante la función miembro estática valueOf, y a continuación convertir el objeto de la clase Double en un tipo primitivo double mediante la función doubleValue String str="12.35 "; double numero=Double.valueOf(str).doubleValue();

Se puede hacer el mismo procedimiento para convertir un string a número entero String str="12"; int numero=Integer.valueOf(str).intValue();

La clase StringBuffer En la sección dedicada a los operadores hemos visto que es posible concatenar cadenas de caracteres, es, decir, objetos de la clase String. Ahora bien, los objetos de la clase String son constantes lo cual significa

14/10/yyyy

15

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 que por defecto, solamente se pueden crear y leer pero no se pueden modificar. Imaginemos una función miembro a la cual se le pasa un array de cadenas de caracteres. Los arreglos (arrays) se estudiarán en la siguiente página.

14/10/yyyy

16

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 // Estimados Alumnos Trabajemos con los metodos que tiene la clase String // Profesor : Pedro González Tapia // int length () Devuelve el número de caracteres de la cadena // char charAt (int pos) Devuelve el caracter que se encuentra en la posición pos // equals (String otra) Determina si la cadena es igual al String otra // int compareTo (String otra) Comparación lexicográfica. Devuelve 0 si los dos String son iguales, un número negativo si el String que invoca a comparteTo es menor que el String quese pasa como argumento y un número positivo en caso contrario. Elvalor devuelto es la diferencia entre las representaciones enteras del primercarácter que es diferente en cada String. // String substring crea unnuevo objeto String copiando parte de un objeto String existente. String (int), String (int, int) // String concat (String otra) Concatena dos String y devuelve un nuevo objeto String que contiene los caracteresde los dos String originales. // S1.concat (s2) añade los caracteres del String s2 al final de s1.S1 y s2 no se modifica // String replace (char, char) genera un objeto String en el que cada ocurrencia del primer carácter en elstring con que se invoca se substituye por el segundo carácter. Sino hubiera coincidencias se regresa una copia del string original. // String toUpperCase ( ) Regresa un objeto de la clase String igual pero cuyas caracteres son todos mayúsculas // String toLowerCase () Regresa un String con todos los caracteres en minúsculas class cadenasMetodo { public static void main() { largoCadena(); devuelvePosicion(); comparaCadenas(); comparaLexico(); subCadena(); concatena(); adicionaCadena(); reemplaza(); mayusculas(); minusculas(); } static void largoCadena () { String Alumnos = "Alumnos del IPP"; System.out.println ("El largo de la cadena es : " + Alumnos.length()); } static void devuelvePosicion() { 14/10/yyyy

17

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 String Alumnos = "Alumnos del IPP"; System.out.println ("El largo de la cadena es : Alumnos.charAt(10)); } static void comparaCadenas() { String cadena1 = "Hola", cadena2 = "Chao"; if (cadena1.equals(cadena2)) { System.out.println("Son iguales"); } else { System.out.println("No son iguales"); } } static void comparaLexico() { String cadena1 = "Hola", cadena2 = "Chao"; if (cadena1.compareTo(cadena2) == 0) { System.out.println("Son iguales"); } else { System.out.println("No son iguales"); } } static void subCadena () { String Alumnos = "Alumnos del IPP"; System.out.println ("El largo de la cadena es : Alumnos.substring(0,5)); } static void concatena () { String cadena1 = "Soy Alumno"; String cadena2 = " Del IPP"; System.out.println ("El largo de la cadena es : cadena1.concat(cadena2)); } static void adicionaCadena () { String cadena1 = "Soy Alumno"; String cadena2 = " Del IPP"; System.out.println ("El largo de la cadena es : cadena1.concat(cadena2)); }

"+

"+

"+

"+

static void reemplaza () { String cadena1 = "Soy Alumno"; String cadena2 = " Del IPP"; System.out.println ("El largo de la cadena es : " + cadena1.replace('o', 'a')); } static void mayusculas () { String cadena1 = "Soy Alumno"; 14/10/yyyy

18

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 System.out.println ("El largo de la cadena es : " + cadena1.toUpperCase()); } static void minusculas () { String cadena1 = "Soy Alumno"; System.out.println ("El largo de la cadena es : " + cadena1.toLowerCase()); } }

14/10/yyyy

19

FUNDAMENTOS DE PROGRAMACION SEMESTRE OTOÑO/2007 Bibliografía http://www.programacion.net http://www.janeg.ca/scjp/oper/conversions.html

14/10/yyyy

20

Related Documents