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 conversin 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 nmeros
// 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;
// Convierto de long a float
puntoFlotante = (float) enteroLargo;
// Convierto de float a Double
19/01/2015
decimal = (double) puntoFlotante;
}
Formateo de Nmeros y Monedas
Los programas almacenan y operan con nmeros de una forma independiente de la Localidad. Antes
de mostrar o imprimir un nmero el programa debe convertirlo a un String que est en un formato
sensible a la Localidad. Por ejemplo, en Francia, el nmero 123456.78 debera ser formateado como
123 456,78, y en Alemania debera aparecer como 123.456,78. En esta leccin, aprenders 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 mtodos de factora proporcionados por la clase NumberFormat, se pueden obtener
formatos especficos de la localidad para nmeros, monedas y porcentajes.
Llamando a los mtodos de la clase NumberFormat se pueden formatear nmeros, monedas y
porcentajes de acuerdo a la Localidad. Sin embargo, hay un error: NumberFormat podra no
soportar la Localidad especificada. Para conocer las definiciones de Locale soportadas por
NumberFormat, llamamos al mtodo getAvailableLocales.
Locale[] locales = [Link]();
Si NumberFormat no soporta la localidad que necesitamos, podemos crear nuestro propio
formateador. Explicaremos este procedimiento en la siguiente seccin, Formatear con Patrones.
El siguiente material muestra como obtener formateadores especficos de la localidad para nmeros,
monedas y porcentajes. Los cdigos de ejemplo son de un programa llamado
[Link].
Nmeros
Se pueden utilizar los mtodos de factoria de NumberFormat para formatear nmeros de tipos de
datos primitivos, como double, y sus correspondientes objetos, como Double.
En el siguiente fragmento de cdigo, formatearemos un Double de acuerdo a la Localidad. Primero,
obtendrmos un ejemplar de NumberFormat especfico de la Localidad, llamando a
19/01/2015
getNumberInstance. Luego llamamos al mtodo format con el Double como argumento. El mtodo
format devuelve el nmero formateado en un String, que est listo para ser mostrado.
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;
numberFormatter = [Link](currentLocale);
amountOut = [Link](amount);
[Link](amountOut + " " + [Link]());
La salida de este ejemplo muestra como el formato del mismo nmero vara con la Localidad.
345 987,246 fr_FR
345.987,246 de_DE
345,987.246 en_US
Monedas
Si ests escribiendo apliaciones de negocios, necesitars formatear y mostrar valores en monedas.
Las monedas se formatean de la misma forma que los nmeros, excepto en que se llama a
getCurrencyInstance para crear el formateador. Cuando se llama al mtodo format , devuelve un
String que incluye el nmero formateado y el signo de moneda apropiado.
El siguiente cdigo muestra como formatear moneda de una forma especfica de la Localidad.
Double currency = new Double(9876543.21);
NumberFormat currencyFormatter;
String currencyOut;
currencyFormatter = [Link](currentLocale);
currencyOut = [Link](currency);
[Link](currencyOut + " " + [Link]());
La salida genera por las lneas precedentes sera 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 podra parecer errnea, porque los valores numricos 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 mtodos pertenecientes a la clase
NumberFormat formatean monedas, pero no las convierten.
Porcentajes
19/01/2015
Tmbien se pueden utilizar los mtodos de la clase NumberFormat para formatear porcentajes.
Para obtener el formateador especfico de la localidad se llama al mtodo getPercentInstance. Con
este formateador, un fraccin como 0.75 se mostrar como 75%.
El siguiente cdigo muetra como formatear porcentajes.
Double percent = new Double(0.75);
NumberFormat percentFormatter;
String percentOut;
percentFormatter = [Link](currentLocale);
percentOut = [Link](percent);
Formatear con Patrones
Con la clase DecimalFormat se especfica un formato de nmero con patrn. La clase
DecimalFormatSymbols permite modificar los simbolos de formateo como separadores decimales
o el signo negativo.
Se puede utilizar la clase DecimalFormat para formatear nmeros decimales en cadenas
especficas 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 smbolo del
formateo como el saperador decimal, se puede utilizar DecimalFormatSymbols en conjuncin con
la clase DecimalFormat. Estas clases ofrecen una gran flexibilidad en el formateo de nmeros, pero
hacen el cdigo ms complejo. Siempre que sea posible, se debera utilizar la clase NumberFormat,
que se describi en la seccin anterior, en vez de DecimalFormat y DecimalFormatSymbols.
Utilizando ejemplos, las siguientes lneas mostrarn como utilizar las clases DecimalFormat y
DecimalFormatSymbols. Los fragmentos de cdigo se han extraido de un programa llamado
[Link].
Construir Patrones
Las propiedades de formateo de DecimalFormat se especfican con un String patrn. El patrn
determina la apariencia del nmero formateado. Para una descripcin completa de la sntaxis de los
patrones puedes ver Sntaxis de los Patrones de Formateo de Nmeros.
En el siguiente ejemplo, hemos creado un formateador, pasndole un patrn al constructor de
DecimalFormat. Luego, le hemos pasado un valor double al mtodo format, que devuelve un
String formateado.
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = [Link](value);
[Link](value + " " + pattern + " " + output);
19/01/2015
La salida de las lneas de cdigo precedentes se describe en la siguiente tabla. El valor es el
nmero, un double, que ser formateado. El Patrn es el String que especfica las propiedades de
formateo. La Salida, que es un String, representa el nmero formateado.
Valor
Patrn
123456.789 ###,###.###
Salida
123,456.789
123456.789 ###.##
123456.79
123.78
000000.000
000123.780
12345.67
$###,###.###
$12,345.67
12345.67
\u00a5###,###.###
12,345.67
Explicacin
El signo Almohadilla (#) indica un dgito, la
coma la posicin del separador de millares y el
punto la posicin del separador decimal.
El valor tiene tres dgitos a la derecha del
punto decimal, pero el patrn slo tiene dos. El
mtodo format maneja esto redondeando.
El patrn especfica relleno con ceros, porque
se utiliza el caracter Cero en vez de la
almohadilla (#).
El primer carcter del patrn es el signo del
dlar ($). Observa que este signo precede
inmediatamente al dgito ms a la izquierda de
la salida formateada.
El patrn especfica el signo del Yen Japons
() 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 = [Link](loc);
DecimalFormat df = (DecimalFormat)nf;
[Link](pattern);
String output = [Link](value);
[Link](pattern + " " + output + " " + [Link]());
Abajo podemos ver el resultado de la ejecucin de este cdigo. Los nmeros formateados, en la
segunda columna, varan 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 seguan las convenciones del
Ingls Norteamericano. Por ejemplo, en el patrn "###,###.##" la coma es el separador de millares y
el punto representa el punto decimal. Esta convencin est bien, sabiendo que los usuarios finales
no estn expuestos a ellas. Sin embargo, algunas aplicaciones, como las hojas de clculo y los
19/01/2015
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 deberan utilizar la
notacin localizada. En estos casos querremos llamar al mtodo applyLocalizedPattern sobre el
objeto DecimalFormat.
Modificar los Smbolos de Formateo
Con la clase DecimalFormatSymbols se pueden modificar los smbolos que aparecen en los
nmeros formateados porducidos por el mtodo format. Estos smbolos incluyen el punto decimal, el
separador de millares, el signo menos, y el signo de porcentaje adems de algunos ms.
En el siguiente ejemplo podemos ver el uso de DecimalFormatSymbols aplicando un formato
inusual a un nmero. Empezamos ejemplarizando DecimalFormatSymbols sin argumentos, lo que
devuelve un objeto para la Localidad por defecto, (Como DecimalFormatSymbols es una clase
sensible a la Localidad, podramos haber especficado una Localidad cuando llamamos al
constructor.) Luego, modificamos el separador decimal y el de millares. Luego especficamos el
DecimalFormatSymbols cuando ejemplarizamos la clase DecimalFormat. Slo para hacer las
cosas ms complicadas, cambiamos la numero de agrupamiento del formateador de tres a cuatro.
Finalmente llamamos al mtodo format.
Aqu tienes el cdigo de Ejemplo.
DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols();
[Link]('|');
[Link]('^');
String strange = "#,##0.###";
DecimalFormat weirdFormatter = new DecimalFormat(strange, unusualSymbols);
[Link](4);
String bizarre = [Link](12345.678);
[Link](bizarre);
Esto es lo que aparecer cuando imprimamos este extrao nmero formateado
1^2345|678
Sntaxis de los Patrones de Formateo de Nmeros
Se pueden disear patrones personalizados para el formateo de nmeros, siguiendo las siguientes
reglas especficas por el diagrama BNF.
patrn := subpatrn{;subpatrn}
subpatrn := /javaentero{.fraccin}{sufijo}
prefijo := '\\u0000'..'\\uFFFD' - CaracteresEspeciales
sufijo := '\\u0000'..'\\uFFFD' - CaracteresEspeciales
19/01/2015
entero := '#'* '0'* '0'
fraccin := '0'* '#'*
La notacin utilizada en el diagrama anterior se explica en la siguiente tabla.
Notacin
X*
(X | Y)
X..Y
S-T
{X}
Descripcin
0 o ms ejemplares de X
XoY
cualquier caracter de X a Y, inclusives
Los caracteres que estn en S, exceptos los que estn en T
X es opcional
En el digrama BNF anteiror, el primer subpatrn especifica el formato para nmeros positivos. El
segundo es opcional, especfica el el formato para nmeros negativos.
Aunque no est en el diagrama BNF, puede aparecer una coma dentro de la porcin "entero".
Dentro de los subpatrones, se especfica el formato con smbolos especiales. Esto smbolos se
describen en esta tabla.
Smbolo
0
#
.
,
E
;
%
?
X
'
Descripcin
Un dgito
Un dgito, se muestra 0 si no existe
Situacin del separador decimal
Situacin del separador de millares
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 smbolo de moneda; Si es doble, reemplazado por
el smbolo de moneda internacional; si est presente en el patrn, se utiliza el separador
decimal monetario en vez de el separador decimal.
Se puede utilizar cualquier otro caracter como prefijo o sufijo
utilizado para enmarcar caracteres especiales en prefijos o sufijos.
19/01/2015
Clase String
Los strings u objetos de la clase String se pueden crear explcitamente o implcitamente. Para crear
un string implcitamente basta poner una cadena de caracteres entre comillas dobles. Por ejemplo,
cuando se escribe
[Link]("El primer programa");
Java crea un objeto de la clase String automticamente.
Para crear un string explcitamente escribimos
String str=new String("El primer programa");
Tambin 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 aqul 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 an no se ha creado ningn objeto de esta
clase.
19/01/2015
Cmo se obtiene informacin acerca del string
Una vez creado un objeto de la clase String podemos obtener informacin relevante acerca del
objeto a travs de las funciones miembro.
Para obtener la longitud, nmero de caracteres que guarda un string se llama a la funcin miembro
length.
String str="El primer programa";
int longitud=[Link]();
Podemos conocer si un string comienza con un determinado prefijo, llamando al mtodo startsWith,
que devuelve true o false, segn que el string comience o no por dicho prefijo
String str="El primer programa";
boolean resultado=[Link]("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 funcin miembro endsWith.
String str="El primer programa";
boolean resultado=[Link]("programa");
Si se quiere obtener la posicin de la primera ocurrencia de la letra p, se usa la funcin indexOf.
String str="El primer programa";
int pos=[Link]('p');
Para obtener las sucesivas posiciones de la letra p, se llama a otra versin de la misma funcin
pos=[Link]('p', pos+1);
El segundo argumento le dice a la funcin indexOf que empiece a buscar la primera ocurrencia de la
letra p a partir de la posicin pos+1.
Otra versin de indexOf busca la primera ocurrencia de un substring dentro del string.
String str="El primer programa";
int pos=[Link]("pro");
Vemos que una clase puede definir varias funciones miembro con el mismo nombre pero que tienen
distinto nmero de parmetros o de distinto tipo.
19/01/2015
Comparacin de strings
La comparacin de strings nos da la oportunidad de distinguir entre el operador lgico == y la funcin
miembro equals de la clase String. En el siguiente cdigo
String str1="El lenguaje Java";
String str2=new String("El lenguaje Java");
if(str1==str2){
[Link]("Los mismos objetos");
}else{
[Link]("Distintos objetos");
}
if([Link](str2)){
[Link]("El mismo contenido");
}else{
[Link]("Distinto contenido");
}
Esta porcin de cdigo 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;
[Link]("Son el mimso objeto "+(str1==str2);
Los objetos str1 y str2 guardan la misma referencia al objeto de la clase String creado. La expresin
(str1==str2) devolver true.
Asi pues, el mtodo 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=[Link]("El lenguaje Java");
La variable resultado tomar el valor true.
La funcin miembro comapareTo devuelve un entero menor que cero si el objeto string es menor (en
orden alfabtico) que el string dado, cero si son iguales, y mayor que cero si el objeto string es
mayor que el string dado.
String str="Toms";
int resultado=[Link]("Alberto");
La variable entera resultado tomar un valor mayor que cero, ya que Toms est despus de Alberto
en orden alfabtico.
19/01/2015
10
String str="Alberto";
int resultado=[Link]("Toms");
La variable entera resultado tomar un valor menor que cero, ya que Alberto est antes que Toms
en orden alfabtico.
Extraer un substring de un string
En muchas ocasiones es necesario extraer una porcin o substring de un string dado. Para este
propsito hay una funcin miembro de la clase String denominada substring.
Para estraer un substring desde una posicin determinada hasta el final del string escribimos
String str="El lenguaje Java";
String subStr=[Link](12);
Se obtendr el substring "Java".
Una segunda versin de la funcin miembro substring, nos permite extraer un substring
especificando la posicin de comienzo y la el final.
String str="El lenguaje Java";
String subStr=[Link](3, 11);
Se obtendr el substring "lenguaje". Recurdese, que las posiciones se empiezan a contar desde
cero.
Convertir un nmero a string
Para convertir un nmero en string se emplea la funcin miembro esttica valueOf (ms adelante
explicaremos este tipo de funciones).
int valor=10;
String str=[Link](valor);
La clase String proporciona versiones de valueOf para convertir los datos primitivos: int, long, float,
double.
Esta funcin se emplea mucho cuando programamos applets, por ejemplo, cuando queremos
mostrar el resultado de un clculo en el rea de trabajo de la ventana o en un control de edicin.
19/01/2015
11
Convertir un string en nmero
Cuando introducimos caracteres en un control de edicin a veces es inevitable que aparezcan
espacios ya sea al comienzo o al final. Para eliminar estos espacios tenemos la funcin miembro
trim
String str=" 12 ";
String str1=[Link]();
Para convertir un string en nmero entero, primero quitamos los espacios en blanco al principio y al
final y luego, llamamos a la funcin miembro esttica parseInt de la clase Integer (clase envolvente
que describe los nmeros enteros)
String str=" 12 ";
int numero=[Link]([Link]());
Para convertir un string en nmero decimal (double) se requieren dos pasos: convertir el string en
un objeto de la clase envolvente Double, mediante la funcin miembro esttica valueOf, y a
continuacin convertir el objeto de la clase Double en un tipo primitivo double mediante la funcin
doubleValue
String str="12.35 ";
double numero=[Link](str).doubleValue();
Se puede hacer el mismo procedimiento para convertir un string a nmero entero
String str="12";
int numero=[Link](str).intValue();
La clase StringBuffer
En la seccin 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 que por defecto, solamente se pueden crear y leer pero no se pueden
modificar.
Imaginemos una funcin miembro a la cual se le pasa un array de cadenas de caracteres. Los
arreglos (arrays) se estudiarn en la siguiente pgina.
19/01/2015
12
19/01/2015
13
// Estimados Alumnos Trabajemos con los metodos que tiene la clase String
// Profesor : Pedro Gonzlez Tapia
// int length () Devuelve el nmero de caracteres de la cadena
// char charAt (int pos) Devuelve el caracter que se encuentra en la posicin pos
// equals (String otra) Determina si la cadena es igual al String otra
// int compareTo (String otra) Comparacin lexicogrfica. Devuelve 0 si los dos String son iguales,
un nmero negativo si el String que invoca a comparteTo es menor que el String quese pasa como
argumento y un nmero positivo en caso contrario. Elvalor devuelto es la diferencia entre las
representaciones enteras del primercarcter 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.
// [Link] (s2) aade 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 carcter
en elstring con que se invoca se substituye por el segundo carcter. 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 maysculas
// String toLowerCase () Regresa un String con todos los caracteres en minsculas
class cadenasMetodo {
public static void main() {
largoCadena();
devuelvePosicion();
comparaCadenas();
comparaLexico();
subCadena();
concatena();
adicionaCadena();
reemplaza();
mayusculas();
minusculas();
}
static void largoCadena () {
String Alumnos = "Alumnos del IPP";
[Link] ("El largo de la cadena es : " + [Link]());
}
static void devuelvePosicion() {
String Alumnos = "Alumnos del IPP";
[Link] ("El largo de la cadena es : " + [Link](10));
}
static void comparaCadenas() {
String cadena1 = "Hola", cadena2 = "Chao";
if ([Link](cadena2)) {
[Link]("Son iguales");
} else {
[Link]("No son iguales");
19/01/2015
14
}
}
static void comparaLexico() {
String cadena1 = "Hola", cadena2 = "Chao";
if ([Link](cadena2) == 0) {
[Link]("Son iguales");
} else {
[Link]("No son iguales");
}
}
static void subCadena () {
String Alumnos = "Alumnos del IPP";
[Link] ("El largo de la cadena es : " + [Link](0,5));
}
static void concatena () {
String cadena1 = "Soy Alumno";
String cadena2 = " Del IPP";
[Link] ("El largo de la cadena es : " + [Link](cadena2));
}
static void adicionaCadena () {
String cadena1 = "Soy Alumno";
String cadena2 = " Del IPP";
[Link] ("El largo de la cadena es : " + [Link](cadena2));
}
static void reemplaza () {
String cadena1 = "Soy Alumno";
String cadena2 = " Del IPP";
[Link] ("El largo de la cadena es : " + [Link]('o', 'a'));
}
static void mayusculas () {
String cadena1 = "Soy Alumno";
[Link] ("El largo de la cadena es : " + [Link]());
}
static void minusculas () {
String cadena1 = "Soy Alumno";
[Link] ("El largo de la cadena es : " + [Link]());
}
}
19/01/2015
15
Bibliografa
[Link]
[Link]
19/01/2015
16