18/04/2004 3.7 Caracteres, String y Otros Tipos de Datos 3.7.1 Arreglos Arreglos, Character, String, StringBuffer, Number, Date Arreglos en Java l l l Arreglos en Java son agrupaciones ordenadas de elementos Los elementos pueden ser tipos primitivos o referencias (incluso referencias a otros arreglos) Las dimensiones de un arreglo se omiten en la declaración de variables l l l Los índice varían desde 0 a largo-1 l l La dimensión se determina en la creación del arreglo Tamaño permanece fijo después de su creación Ejemplo de un Arreglo public class demoArreglo { public static void main(String[] args) { // declarar un arreglo de enteros int[] unArreglo; // crear un arreglo de enteros unArreglo = new int[10]; // asigna un valor a cada elemento del arreglo e imprime for ( int i = 0; i < unArreglo.length ; i + +) { anArray[i ] = i; System.out.print(unArreglo[i] + " ") ; } System.out.println(); } } Acceso ilegal lanza IndexOutOfBoundsException Los arreglos no se pueden derivar Uso de Arreglos Arreglo de Arreglos Declaración de un Arreglo (sin tamaño) public class ArregloDeArreglo { l tipo[] variable; Creación de un arreglo vacío (especifica tamaño) l variable = new tipo[tamaño]; l Creación e inicialización rápida public static void main(String[] args) { String[][] cartoons = { {"Flintstones ","Fred" ,"Wilma" ,"Pebbles", "Dino" } , {"Rubbles ","Barney"," Betty"," Bam Bam " }, {"Jetsons ","George","Jane","Elroy "," Judy ","Rosie ","Astro" }, {"Scooby Doo Gang ","Scooby D o o"," Shaggy" ,"Velma" ,"Fred", "Daphne" } }; for ( int i = 0; i < cartoons.length; i++ ) { System.out.print(cartoons[i][0] + ": "); for ( int j = 1; j < cartoons[i].length; j++) System.out.print(cartoons[i][j] + " "); System.out.println(); } } } l l l l l l tipo[] variable = {val0 , val1 , ... , valn-1 }; Acceso a un elemento del arreglo variable[indice] Tamaño del arreglo l variable.length Flintstones: Fred Wilma Pebbles Dino Rubbles: Barney Betty Bam Bam Jetsons: George Jane Elroy Judy R o s i e Astro Scooby D o o Gang: Scooby Doo Shaggy Velma Fred Daphne 1 18/04/2004 Copiado de Arreglos l Para copiar un arreglo se puede usar método arraycopy de System : l public static void arraycopy( Object fuente, int indiceFuente, Object destino, int indiceDestino, int largo) Ejemplo de Copia de Arreglos public class DemoCopiaArreglos { public static void main(String[] args) { char[] copiarDesde = { 'd', 'e', 'c', 'a', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' }; char[] copiarA = new char[7]; } } cafeina Utilidades para arreglos l l l l static static static static l int binarySearch(<tipo>[] a, <tipo> key) boolean equals(<tipo>[] a, <tipo>[] a2) void fill(<tipo>[] a, <tipo> val) void sort(Object[] a) Los objetos deben implementar la interfaz java.util.Comparable Clases Básicas para Caracteres l l l 3.7.2 Caracteres y Strings Clase utilitaria java.util.Arrays l System.arraycopy(copiarDesde, 2, copiarA, 0, 7); System.out.println(new String(copiarA)); Character.Clases cuyas instancias pueden mantener un único valor (wrapper) String. Clase para almacenar y manipular datos inmutables compuestos de múltiples caracteres StringBuffer. Clase para almacenar y manipular datos mutables compuestos de múltiples caracteres Métodos de Character l l l l l l Character(char ) l Constructor crea objeto inmutable int compareTo(Character ) l Retorna entero que compara con otro carácter boolean equals(Object) l Retorna true si son de igual valor String toString () l Convierte a string char charValue() l Retorna valor del objeto isUpperCase(char ) l Retorna true si es mayúscula 2 18/04/2004 Ejemplo de Character public class CharacterDemo { public staticvoid main(String args[]) { Character a = new Character('a'); Character a2 = new Character('a'); Character b = new Character('b'); int diferencia = a.compareTo(b); if (difference == 0) { System.out.println("a es igual a b."); } else if (diferencia < 0) { System.out.println("a es menor que b."); } else if (diferencia > 0) { System.out.println("a es mayor que b."); } System.out.println("a es " + (( a.equals(a2)) ? “igual" : “no igual") + " a a2."); System.out.println(“El carácter " + a.toString() + " es " + (Character.isUpperCase(a.charValue()) ? “mayúscula" : “minúscula")); } } Creación de Strings y StringBuffers l l Java permite crear un String en diversas situaciones Ejemplo: Ejemplo de String y StringBuffer public class StringsDemo { public static void main(String [] args) { String palindrome = “ recocer "; int largo = palindrome.length(); StringBuffer destino = new StringBuffer(len); for (int i = (largo - 1); i >= 0; i --) { destino.append(palindrome.charAt(i)); } System.out.println(destino.toString ()); } } Métodos Accesores (Comunes) l int length() l l “Este es un String" // literal l String palindrome = “recocer"; // referencia String char[] ArregloHola = { 'h', ‘o', 'l', ‘a'}; // arreglo de caracteres l l System.out.println(StringHola); StringBuffer debe siempre usar new para crear un string n Métodos Específicos de String l indexOf(int caracter ), lastIndexOf(int caracter ) l l l l Retorna índice de primera (última) ocurrencia de carácter, buscando hacia delante (atrás) desde índice especificado indexOf(String str), lastIndexOf(String str ) l l Retorna índice de primera (última) ocurrencia de String str , buscando hacia delante (atrás) desde índice especificado. Convierte a string Métodos Específicos de String l l l l Retorna índice de la primera (última) ocurrencia del String str. indexOf(String str, int desde ), lastIndexOf(String str , int from) Obtiene parte del String Los dos enteros indican primera y última posición. Sino se indica segundo entero, se asume hasta el final String toString() indexOf(int car , int desde) , lastIndexOf(int car, int desde) l l Retorna índice de la primera (última) ocurrencia de caracter l Obtiene carácter en posición pos. 0 es el primero y length()-1 el último String substring(int), String substring(int, int) l String StringHola = new String(ArregloHola); Obtiene el largo del String o StringBuffer char charAt(int pos) int compareTo(String otroString) l Compara dos lexicográficamente(interfaz Comparable) String concat(String str) l Concatena el string str al final String toLowerCase() l Convierte un String a minúsculas String toUpperCase() l l Convierte un String a mayúsculas etc. l VER: http://java.sun.com /j2se/1.4/docs/api/java/lang /String.html 3 18/04/2004 Métodos de StringBuffer StringBuffer append(String str) l Agrega str al final del buffer de string. int capacity() l Retorna la capacidad actual del buffer de string StringBuffer insert(int offset, String str) l Inserta str en la posición offset del buffer de string. StringBuffer delete (int inicio, int fin) l Elimina los caracteres entre inicio y fin l l l l l VER: http://java.sun.com /j2se/1.4/docs/api/java/lang /StringBuffer.ht ml Clases Extendidas de Number Clase Number l byte byteValue() l Retorna el valor del número double doubleValue() l Retorna el valor del número float floatValue() l Retorna el valor del número int intValue() l Retorna el valor del número long longValue() l Retorna el valor del número short shortValue() l Retorna el valor del número l l l l l especificado como byte especificado como double especificado como float l l l l l l especificado como long l l l l Byte. Clase envolvente para byte Double. Clase envolvente para double Float. Clase envolvente para float Integer. Clase envolvente para int Long. Clase envolvente para long Short. Clase envolvente para short BigDecimal. Número decimal de precisión arbitraria BigInteger. Número entero de precisión arbitraria especificado como short exponenciación logaritmos raíz cuadrada Funciones trigonométricas Máximos y mínimos Redondeos etc. Ver l l l especificado como int El paquete java.lang.Math contiene funciones tales como: l l l Funciones Matemáticas l Wrappers y funciones etc. l l 3.7.3 Números http://java.sun.com /j2se/1.4/docs/api/java/lang /Math.html Formatos de Números l l Los programas almacenan y operan números en forma independiente de la localidad Al desplegar los valores con toString se debieran hacer en el formato de la localidad l l l l Inglés: Francés: Alemán: 123456.78 123 456,78 123.456,78 Java provee soporte para realizar tales conversiones en paquete java.text l l NumberFormat DecimalFormat 4 18/04/2004 Clase java.util.Date 3.7.4 Date Fecha y hora l l l Útil para manejar datos fecha/hora Constructor por defecto entrega fecha actual Operaciones l l l l Comparación Suma Formato Clase utilitarias l l java.util.Calendar java.text.DateFormat 5