Vous êtes sur la page 1sur 31

Java Recopilaciones

Muy buenos tutoriales de java http://www.youtube.com/user/niktutos http://casidiablo.net/java/ http://java-elrincondetucasa.blogspot.com/2010/11/leerstream-de-cmd.html http://www.javamexico.org/node?page=5 http://www.youtube.com/watch? v=j8sjPycUjIA&feature=channel http://www.javahispano.org/contenidos/es/curso_de_programa cion_java_vii_el_ultimo_de_la_serie_abraham_otero/

Tipos de Datos
A. Integer (Entero) permite slo nmeros enteros
Conversin a entero: int numero = Integer.parseInt(cadena);

B. Double (Doble) permite nmeros con decimales largos


Conversin a doble: double numero = Double.parseDouble(cadena); C. Float (Flotante) permite nmeros con decimales cortos Conversin a float: float numero = Float.parseFloat(cadena);

D. String (Cadena) permite cadenas de texto Conversin a String: String cadena = Algo.toString(); E. Char (Caracter) permite solo un dgito de una cadena alfanumrica Conversin a arreglo de Caracteres: char []letras = cadena.toCharArray(); F. Boolean (Booleano) almacena un valor de verdad dentro de una variable Conversin a booleano: boolean variable = Boolean.parseBoolean(cadena); Trabajando con cadenas (String) Suponiendo que se tiene una cadena con nombre Cadena se usar para lo siguiente Accin Cdigo Reemplazar un carcter o trozo de cadena Eliminar un carcter o trozo de cadena Contar cantidad de letras en una cadena Crear arreglo a partir de una separacin (En este caso crear un arreglo con todas las partes que sean separados con un espacio) Leer un carcter de una cadena Poner cadena en minsculas Cadena.toLowerCase() Poner cadena en maysculas Eliminar vacos del inicio y final de la cadena Condicionando con cadenas (String) A continuacin las funciones que mayormente son usadas para hacer condicionales con cadenas, stas devolvern una valor booleano [true](verdadero) o [false](falso) . Accin Cdigo Comparar igualdad entre cadenas Cadena.equals(Cadena_a_comparar) Comprobar si hay un trozo cadena dentro de Cadena.contains(Cadena_a_buscar) la cadena condicionada (Por ejemplo: Busca si existe auto dentro de la cadena autopista) Comprobar si la cadena est vaca o nula Cadena.isEmpty() Simplificando condicionales que trabajan con booleanos La forma de trabajar con booleanos de forma poco tradicional resulta pesada, pero hay una forma de simplificarla Accin Comprobar si el valor es V Comprobar si el valor es F Simplificaciones tiles Manera Simple Concatenacin Cadena = Cadena + texto Manera Simplificada Cadena += texto Modo Poco tradicional if(booleano == true){ if(booleano == false){ Modo simplificado if(booleano){ If(!booleano){ Cadena.replace(a,e) Cadena.replace(a,) Cadena.length() Cadena.split( )

Cadena.charAt(#indice) Cadena.toUpperCase() Cadena.trim()

Aumentar y disminuir Aumentar uno Restar uno Operaciones Sumar Restar Multiplicar Divisin Creando arreglos

Numero = Numero + 1 Numero = Numero 1 Numero-Numero1 = Numero1 + N2 Numero1 = Numero1 N2 Numero1 = Numero1 * N2 Numero1 = Numero1 / N2

Numero++

Numero1 += N2 Numero1 -= N2 Numero1 *= N2 Numero1 /= N2

Un arreglo es un conjunto de datos que en su mayora es homogneo. A. Crear un arreglo simple TipodeDato []nombreDelArreglo = new TipodeDato[#Elementos]; B. Crear un arreglo de objeto NombreDelObjeto []nombreDelArreglo = new nombreDelObjeto [#Elm]; Si se desea aumentar el nmero de dimensiones o columnas dentro del arreglo se aumenta la cantidad de[] (corchetes Contando el nmero de elementos en los arreglos La propiedad de los arreglosl en gth permite conocer el nmero de elementos de un arreglo. ste siempre es un nmero superior al del ndice Arreglo: ndice Elemento 0 23 1 54 2 56 3 89 4 16 5 32

Usando length: int numeroElementos = Arreglo.length; La variable numeroElementos ser igual a 6 (ver la fila de ndice) 2da Parte: Trabajando con GUI Concatenando con JTextField y JTextArea JTextField y JTextArea son dos elementos que se usan dentro de JFrame, la diferencia entre estos elementos es que JTextField trabaja con texto en una sola lnea mientras que JTextArea trabaja con texto en varas lneas JTextField cuadroTexto.setText(cuadroTexto.getText+texto) JTextArea Cdigos adicionales textArea.append(texto);

A. Abrir ventana con un botn NombreClaseVentana frame = new NombreClaseVentana(); frame.setVisible(true); Donde frame puedes cambiarlo por el nombre que quieras y NombreClase Ventana es el nombre de la clase de tu ventana

B. Abrir applet dentro de un frame (usando un botn) // Debemos importar primero la clase JFrame import javax.swing.JFrame; //Dentro del botn debemos poner algo asi JFrame frame = new JFrame(); NombreClaseApplet miapplet = new NombreClaseApplet(); frame.add(miapplet); frame.pack(); frame.setVisible();

Manejo de cadenas en Java. Mtodos split, indexOf, substring y trim


Muchas veces nos es necesario tratar cadenas de texto, pero la mayora de esas veces no utilizamos la cadena entera, sino que necesitamos extraer subcadenas que contienen datos relevantes. Java tiene varios mtodos para el manejo de cadenas. Los que vamos a tratar son los siguientes: String[] split(String regex) int indexOf(int ch) int indexOf(int ch, int fromIndex) String substring(int beginIndex) String substring(int beginIndex, int endIndex) String trim() El mtodo split devuelve un array de String. Es muy til cuando tenemos un conjunto de elementos separados por comas. Por ejemplo:
String colores = "rojo,amarillo,verde,azul,morado,marrn"; String[] arrayColores = colores.split(","); // En este momento tenemos un array en el que cada elemento es un color. for (int i = 0; i < arrayColores.length; i++) { System.out.println(arrayColores[i]); }

La salida ser: rojo amarillo verde azul morado marrn El mtodo indexOf devuelve la primera aparicin de una expresin regular o una cadena normal dentro de un String. Si le pasamos dos parmetros el primero ser la cadena a buscar y el segundo la posicin en la que empezar a buscar. El mtodo substring devolver una subcadena del String, desde la posicin de inicio hasta la posicin de fin. Si slo se especifica un parmetro la subcadena contendr desde la posicin de inicio hasta el final de la cadena. Se ve ms claro en el siguiente ejemplo:
String colores = "rojo,amarillo,verde,azul,morado,marrn"; int inicio = colores.indexOf(","); int fin = colores.indexOf(",", inicio + 1); System.out.println(colores.substring(inicio + 1, fin)); System.out.println(colores.substring(inicio));

La salida ser:

amarillo amarillo,verde,azul,morado,marrn Por ltimo, el mtodo trim devuelve una copia de la cadena, pero sin los espacios al inicio o al fin. Es bastante til en el uso de formularios y en otras muchas ocasiones. Os dejo la prueba para vosotros. Java: StringTokenizer y Split Separar una String por elementos
En este tutorial se vern dos formas de dividir una cadena de texto para extraer el contenido que nos interese. Supongamos que tenemos una cadena de texto con elementos separados por espacios, por ejemplo:

01-String cadena = "elemento1 elemento2 elemento3";

StringTokenizer
Una de las formas para hacerlo en Java es utilizar la clase StringTokenizer, la cual dividir la cadena en Tokens (por defecto dividir la cadena por espacios).

1. String linea = "elemento1 elemento2 elemento3"; 2. StringTokenizer tokens = new StringTokenizer(linea); 3. while(tokens.hasMoreTokens()){ 4. System.out.println(tokens.nextToken()); 5. } Si se desea dividir la cadena por otro elemento distinto del espacio se puede llamar al constructor StringTokenizer con un parmetro ms. Por ejemplo, si la cadena tuviera los elementos separados por el caracter #, modificaramos esta lnea de cdigo del ejemplo anterior: 01-StringTokenizer tokens = new StringTokenizer(linea,"#"); *NOTA: Recordamos que para utilizar esta clase es necesario importar el paquete JAVA que la contiene en las primeras lneas del programa import java.util.StringTokenizer;

Split
Otra posibilidad es utilizar la funcin Split de la clase String. Con esta funcin se pueden utilizar expresiones regulares. En este ejemplo separamos los elementos con espacio (expresin regular \\s) y el ms para indicar que puede haber ms caracteres a continuacin.
1. 2. 3. 4. 5. 6. 7. int j = 0; String linea = "elemento1 elemento2 elemento3"; String [] campos = linea.split("\\s+"); while(j<campos.length){ System.out.println(campos[j]); j++; }

La funcin split pone cada elemento encontrado en una posicin del vector de Strings, para mostrar los elementos slo hace falta recorrerlo.

Ejemplo ms complejo con StringTokenizer

Veamos este ejemplo para obtener elementos dentro de otros elementos con StringTokenizer. Supongamos que tenemos una cadena del tipo:
1. String cadena = "[[a,b],[c,d],[e,f]]";

Podemos extraer los elementos de la siguiente forma:


1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. int i; String line,word,subword; StringTokenizer elementos,subelementos; line ="[[a,b],[c,d],[e,f]]"; elementos = new StringTokenizer(line,"[]"); while(elementos.hasMoreTokens()){ word = elementos.nextToken(); i=1; subelementos = new StringTokenizer(word,","); while(subelementos.hasMoreTokens()){ subword = subelementos.nextToken(); System.out.println(i+". "+subword); i++; } }

Java Contar palabras en Java


La idea del ejemplo es ver como podemos contar las palabras de un texto en Java. Podramos hacerlo de diferentes formas, pero vamos a utilizar la clase StringTokenizer para solucionar nuestro problema. Lo primero que tenemos que hacer es definir una frase dentro de una cadena de texto:
String sTexto = "En un lugar de la mancha";

La clase StringTokenizer trocea una cadena a partir de un deliminator dado. En el caso de que no le indiquemos el indicador a usar utilizar el espacio en blanco. Veamos como se utilizara con la frase anterior:
StringTokenizer st = new StringTokenizer(sTexto);

Una vez creado el StringTokenizer (es como un Enumerado) podremos recorrerle para ver en cuantas palabras ha troceado nuestro texto o bien invocar al mtodo .countTokens() que devuelve el nmero de elementos que contiene el StringTokenizer. Y simplemente nos quedar volcarlo por pantalla:
System.out.println ( st.countTokens() );

constructores Obtencin de tokens La clase StringTokenizer nos ayuda a dividir un string en substrings o tokens, en base a otro string (normalmente un carcter) separador entre ellos denominado delimitador. Supongamos un string consistente en el nombre, y los dos apellidos de una persona separados por espacios en blanco. La clase StringTokenizer nos ayuda a romper dicho string en tres substrings basado en que el carcter delimitador es un espacio en blanco. tokens: TokenApp.java Un control rea de texto, permite varias lneas de texto, cada lnea est separada de la siguiente mediante un carcter nueva lnea '\n' que se obtiene pulsando la tecla Enter o Retorno. Mediante una funcin denominada getText obtenemos todo el texto que contiene dicho control. La clase StringTokenizer nos permite dividir el string obtenido en un nmero de substrings o tokens igual al nmero de lneas de texto, basado en que el carcter delimitador es '\n'. Para usar la clase StringTokenizer tenemos que poner al principio del archivo del cdigo fuente la siguiente sentencia import.
import java.util.*;

o bien
import java.util.StringTokenizer;

Los constructores
Creamos un objeto de la clase StringTokenizer llamando a uno de los tres constructores que tiene la clase. Al primer constructor, se le pasa el string nombre que va a ser dividido teniendo en cuenta que el espacio en blanco es el delimitador por defecto.
String nombre="Angel Franco Garca"; StringTokenizer tokens=new StringTokenizer(nombre);

Supongamos ahora que en un control rea de texto introducimos los siguientes datos, resultado de ciertas medidas, tal como se ve a la izquierda en la figura. Obtenemos el texto del control rea de texto. Creamos un objeto tokens de la clase StringTokenizer, pasndole el string strDatos y el delimitador "\n"
String strDatos="6.3\n6.2\n6.4\n6.2"; StringTokenizer tokens=new StringTokenizer(strDatos, "\n");

La clase StringTokenizer
Obtencin de los tokens

La clase StringTokenizer implementa el interface Enumeration, por tanto define las funciones nextElement y hasMoreElements.
public class StringTokenizer implements Enumeration { //... public boolean hasMoreElements() { //... } public Object nextElement() { //... } }

Para el programador es ms cmodo usar las funciones miembro equivalentes nextToken y hasMoreTokens. Para extraer el nombre, el primer apellido y el segundo apellido en el primer ejemplo, escribiremos
String nombre="Angel Franco Garca"; StringTokenizer tokens=new StringTokenizer(nombre); while(tokens.hasMoreTokens()){ System.out.println(tokens.nextToken()); }

El segundo ejemplo, requiere un poco ms de trabajo, ya que adems de extraer los tokens del string strDatos, hemos de convertir cada uno de los substrings en un valor numrico de tipo double y guardarlos en el array datos del mismo tipo. Vase la seccin convertir un string en un valor numrico.
String str=tokens.nextToken(); datos[i]=Double.valueOf(str).doubleValue();

El nmero de tokens o de datos nDatos que hay en un string strDatos, se obtiene mediante la funcin miembro countTokens. Con este dato establecemos la dimensin del array datos.
int nDatos=tokens.countTokens(); double[] datos=new double[nDatos];

Una vez guardados los datos introducidos en el control rea de texto en el array datos, podemos operar con ellos, obteniendo su valor medio, y el error cometido en las medidas efectuadas. El cdigo completo para extraer los tokens del string strDatos y guardarlos en un array datos, es el siguiente.
String strDatos="6.3\n6.2\n6.4\n6.2"; StringTokenizer tokens=new StringTokenizer(strDatos, "\n"); int nDatos=tokens.countTokens();

double[] datos=new double[nDatos]; int i=0; while(tokens.hasMoreTokens()){ String str=tokens.nextToken(); datos[i]=Double.valueOf(str).doubleValue(); System.out.println(datos[i]); i++; }

Java Extraer contenido separado por delimitadores con Java Una de las consultas que nos han hecho en la web es acerca de como extraer contenido que se encuentre separado por delimitadores Y es que en muchas situaciones nos podemos encontrar con este problema. Posiblemente el ms tpico es aquel en el que recibimos informacin en un fichero que ha sido exportado de alguna herramienta. Por ejemplo, partamos de la siguiente informacin:
ciudad#min#max#cielo avila#12#24#soleado toledo#16#15#soleado madrid#15#27#soleado barcelona#12#20#nublado

Vemos que el contenido est separado por delimitadores. En este caso mediante una almohadilla (#). Si queremos procesar el contenido de las cadenas deberemos de extraer la informacin separada por los delimitadores. Para esto podemos apoyarnos en el mtodo StringTokenizer. 1. StringTokenizer st = new StringTokenizer(sTexto,delimitador); Dicho mtodo nos deja los items encontrados en una cadena de texto cada vez que encuentre un delimitador. As, si partimos de la cadena 1. String sTiempo = "avila#12#24#soleado"; Podemos instanciar el StringTokenizer de la siguiente forma: 1. StringTokenizer st = new StringTokenizer(sTiempo,"#"); Como vemos, pasamos la almohadilla (#) como el separador que ha de utilizar el StringTokenizer. Solo nos quedar recorrer el StringTokenizer para extraer los elementos. Esta ltima operacin la realizamos con los mtodos .hasMoreTokens() y .nextToken(). 1. while (st.hasMoreTokens()) 2. System.out.println (st.nextToken())

La clase String
string: StringApp.java Dentro de un objeto de la clases String o StringBuffer, Java crea un array de caracteres de una forma similar a como lo hace el lenguaje C++. A este array se accede a travs de las funciones miembro de la clase. 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
System.out.println("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.

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=str.length();

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=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 funcin miembro endsWith.
String str="El primer programa"; boolean resultado=str.endsWith("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=str.indexOf('p');

Para obtener las sucesivas posiciones de la letra p, se llama a otra versin de la misma funcin

pos=str.indexOf('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=str.indexOf("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.

Comparacin de strings
equals: EqualsApp.java 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){ 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 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; 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 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=str.equals("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=str.compareTo("Alberto");

La variable entera resultado tomar un valor mayor que cero, ya que Toms est despus de Alberto en orden alfabtico.
String str="Alberto"; int resultado=str.compareTo("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=str.substring(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=str.substring(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=String.valueOf(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.

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=str.trim();

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=Integer.parseInt(str.trim());

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=Double.valueOf(str).doubleValue();

Se puede hacer el mismo procedimiento para convertir un string a nmero entero


String str="12"; int numero=Integer.valueOf(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 arrays se estudiarn en la siguiente pgina.
public class CrearMensaje{ public String getMensaje(String[] palabras){ String mensaje=""; for(int i=0; i<palabras.length; i++){ mensaje+=" "+palabras[i]; } return mensaje; } //... }

Cada vez que se aade una nueva palabra, se reserva una nueva porcin de memoria y se desecha la vieja porcin de memoria que es ms pequea (una palabra menos) para que sea liberada por el recolector de basura (grabage collector). Si el bucle se realiza 1000 veces, habr 1000 porciones de memoria que el recolector de basura ha de identificar y liberar. Para evitar este trabajo extra al recolector de basura, se puede emplear la clase StringBuffer que nos permite crear objetos dinmicos, que pueden modificarse.
public class CrearMensaje{ public String getMensaje(String[] palabras){ StringBuffer mensaje=new StringBuffer(); for(int i=0; i<palabras.length; i++){ mensaje.append(" "); mensaje.append(palabras[i]); } return mensaje.toString(); } //... }

La funcin append incrementa la memoria reservada para el objeto mensaje con una palabra ms sin crear nueva memoria, cada vez que se ejecuta el bucle. La funcin toString, que veremos ms adelante, convierte un objeto en una cadena de caracteres.

Collections de Java
Introduccin
Un tema que aparece frecuentemente en la programacin es el de organizar una coleccin de objetos en memoria. Este tema tambin es conocido con el ttulo estructuras de datos, y se relaciona tambin a distintos algoritmos para agilizar el acceso. Antes de hablar especficamente de las colecciones de Java voy a desviarme un rato hablando un poco sobre el problema en general de almacenar colecciones de datos en memoria.

Algoritmos y estructuras de datos

Todo programador aprende, apenas empieza, un par de estructuras de datos simples. Podramos decir que la primer estructura de datos es la variable. Almacena un solo objeto, y el tiempo de acceso es nfimo. La segunda estructura de datos que siempre se aprende es el arreglo (en ingls "array"). Esta coleccin nos permite obtener un valor dado una posicin en una tabla. Es muy veloz ya que esta estructura tiene un fuerte paralelo con cmo se organiza internamente la memoria de una computadora. Los valores en un arreglo estn en orden, y en ese mismo orden estn dispuestos en la memoria, por lo tanto el acceso lo maneja directamente el hardware (porque la memoria funciona fsicamente como un arreglo). Un arreglo en Java se hace as (pero asumamos que ya se sabe). String[] nombres = new String[10]; Muchos programadores se detienen aqu. Ayuda a esto el hecho de que en algunos lenguajes el arreglo era la estructura de datos ms compleja soportada (por ejemplo en BASIC... o incluso C!). Uno puede usar arreglos para todo. Quiero guardar la lista de helados que me gusta? Las notas que se sacaron los alumnos de una clase? La coleccin de coordenadas que forman un mapa? Puede guardarse en un arreglo... ahora... supongamos que quiero guardar las notas de los alumnos de una clase. Si quiero usar un arreglo podra actuar as: Creo una clase con el nombre del alumno y su nota:

class Nota { String alumno; int nota; nota; } Nota(String alumno, int nota) { this.alumno = alumno; this.nota = public int getNota() { return nota; } public String getAlumno() { return alumno; }

} Ahora almaceno las notas de 500 alumnos:

Nota[] notas = new Nota[500]; notas[0] notas[1] notas[2] notas[3] // ... notas[499] = new Nota("Elas", 9); Ahora... Qu pasa si queremos averiguar la nota de Elas? No sabemos "a priori" en qu posicin del arreglo est guardada la nota. La nica manera que tenemos de proceder es simplemente recorrer el arreglo y preguntar si ya llegamos al alumno que queremos: for(Nota n : notas) if(n.getNombre().equals("Elas")) return n.getNota(); Esto es lentsimo! Est bien, Elas es el peor caso, ya que se encuentra ltimo. A Elas lo encontraremos despus de haber efectuado 499 comprobaciones. Pero si suponemos que todos los alumnos son accedidos ms o menos con una misma probabilidad tenemos que el nmero de comprobaciones promedio que se necesitarn por bsqueda de alumno es de 250! Podemos hacerlo mejor? Qu tal si pudiramos contar con que el orden de las notas coincide con el orden alfabtico del nombre de los alumnos? En ese caso podramos ir al alumno 250, y preguntar: Elas es mayor o menor alfabticamente que vos? Si el alumno 250 es Luis, Elas claramente est antes qu l. Luego, Elas est entre el 0 y el 249. Entonces vamos a comprobar al alumno 125, que es, por ejemplo, Carlos. Elas est despus que Carlos, entonces sabemos que su posicin es mayor a 125 (y era menor a 249). As vamos acotando hasta llegar a Elas en, a lo sumo, 9 comprobaciones. A este algoritmo se le suele llamar bsqueda dicotmica. No hace falta entender del todo el prrafo anterior. El quid de la cuestin es entender que, mediante algoritmos, redujimos la necesidad de comprobar 250 veces en promedio, a comprobar a lo sumo nueve veces. Y si en vez de 500 nombres tenemos 100.000 necesitaremos comprobar, a lo sumo, 17 veces. El uso de este algoritmo depende del hecho de que los datos que ordenamos estn ordenados. Asimismo cada una de las soluciones puede traer problemas secundarios que sern ms o menos importantes de acuerdo a nuestras necesidades. En el ejemplo anterior, por ejemplo, necesitamos mantener un arreglo ordenado... qu pasa si se agrega un nuevo alumno? Habr que insertarlo en la posicin correcta de acuerdo al orden = = = = new new new new Nota("Juan", 7); Nota("Pedro", 8); Nota("Manuel", 4); Nota("David", 6);

alfabtico y desplazar a todos lo que queden a su derecha un lugar. En el peor caso es recorrer todo el arreglo! Todo esto quiere decir que el tipo de estructura de datos que se use depender de lo que puede asumir de la coleccin almacenada y de cmo se espera que esa coleccin sea usada (cmo sea leda y cmo sea modificada). Algunas preguntas a hacerse son: Me interesa mantener el orden abitrario original? Puedo (como con las notas) reordenar los tems? Hay duplicados? Con qu frecuencia es necesario aadir nuevos elementos?

Mtodos static de Character para probar caracteres y cambiar maysculas/minsculas


import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MetodosStaticChar extends JFrame { private char c; private JLabel indicadorEtiqueta; private JTextField entradaCampo; private JTextArea areaSalida; // el constructor crea la GUI public MetodosStaticChar() { super( "Mtodos estticos de Character" ); Container contenedor = getContentPane(); contenedor.setLayout( new FlowLayout() ); indicadorEtiqueta = new JLabel( "Escriba un carcter y oprima Intro" ); contenedor.add( indicadorEtiqueta ); entradaCampo = new JTextField( 5 ); entradaCampo.addActionListener( new ActionListener() { // clase interna annima // manejar evento del campo de texto public void actionPerformed( ActionEvent evento ) { String s = evento.getActionCommand(); c = s.charAt( 0 ); crearSalida(); } } // fin de la clase interna annima ); // fin de la llamada a addActionListener contenedor.add( entradaCampo ); areaSalida = new JTextArea( 10, 20 ); contenedor.add( areaSalida ); setSize( 300, 225 ); // establecer el tamao de la ventana setVisible( true); // mostrar la ventana } // fin del constructor // mostrar informacin del carcter en areaSalida private void crearSalida() { areaSalida.setText( "est definido: " + Character.isDefined( c ) + "\nes dgito: " + Character.isDigit( c ) + "\nes primer caracter en un identificador de Java: " + Character.isJavaIdentifierStart( c ) + "\nes parte de un identificador de Java: " + Character.isJavaIdentifierPart( c ) + "\nes letra: " + Character.isLetter( c ) + "\nes letra o dgito: " + Character.isLetterOrDigit( c ) + "\nes minscula: " + Character.isLowerCase( c ) + "\nes mayscula: " + Character.isUpperCase( c ) + "\na mayscula: " + Character.toUpperCase( c ) + "\na minscula: " + Character.toLowerCase( c ) ); } // crear objeto MetodosStaticChar para empezar la ejecucin public static void main( String args[] )

{ MetodosStaticChar aplicacion = new MetodosStaticChar(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } } // fin de la clase MetodosStaticChar

Mtodos static de Character para la conversin de caracteres


import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MetodosStaticChar2 extends JFrame { private char c; private int digito, raiz; private JLabel indicador1, indicador2; private JTextField entrada, raizCampo; private JButton enChar, enInt; // el constructor crea la GUI public MetodosStaticChar2() { super( "Mtodos de conversin de Character" ); Container contenedor = getContentPane(); contenedor.setLayout( new FlowLayout() ); indicador1 = new JLabel( "Escriba un dgito o caracter " ); entrada = new JTextField( 5 ); contenedor.add( indicador1 ); contenedor.add( entrada ); indicador2 = new JLabel( "Escriba una raz " ); raizCampo = new JTextField( 5 ); contenedor.add( indicador2 ); contenedor.add( raizCampo ); enChar = new JButton( "Convertir dgito en carcter" ); enChar.addActionListener( new ActionListener() { // clase interna annima // manejar evento de objeto JButton enChar public void actionPerformed( ActionEvent eventoAccion ) { digito = Integer.parseInt( entrada.getText() ); raiz = Integer.parseInt( raizCampo.getText() ); JOptionPane.showMessageDialog( null, "Convertir dgito en carcter: " + Character.forDigit( digito, raiz ) ); } } // fin de clase interna annima ); // fin de la llamada a addActionListener enInt = new JButton( "Convertir carcter en dgito" ); enInt.addActionListener( new ActionListener() { // clase interna annima // manejar evento de objeto JButton enInt public void actionPerformed( ActionEvent eventoAccion ) { String s = entrada.getText(); c = s.charAt( 0 ); raiz = Integer.parseInt( raizCampo.getText() ); JOptionPane.showMessageDialog( null, "Convertir carcter en dgito: " + Character.digit( c, raiz ) ); }

} // fin de la clase interna annima ); // fin de la llamada a addActionListener contenedor.add( enChar ); contenedor.add( enInt ); setSize( 275, 150 ); // establecer el tamao de la ventana setVisible( true ); // mostrar la ventana } // crear objeto MetodosStaticChar2 para ejecutar la aplicacin public static void main( String args[] ) { MetodosStaticChar2 aplicacion = new MetodosStaticChar2(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } } // fin de la clase MetodosStaticChar2

Mtodos no static de Character

import javax.swing.*; public class OtrosMetodosChar { public static void main( String args[] ) { Character c1 = new Character( 'A' ); Character c2 = new Character( 'a' ); String salida = "c1 = " + c1.charValue() + "\nc2 = " + c2.toString(); if ( c1.equals( c2 ) ) salida += "\n\nc1 y c2 son iguales"; else salida += "\n\nc1 y c2 no son iguales"; JOptionPane.showMessageDialog( null, salida, "Mtodos no estticos de Character", JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 ); } } // end class OtrosMetodosChar

La clase StringTokenizer
import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PruebaToken extends JFrame { private JLabel indicadorEtiqueta; private JTextField entradaCampo; private JTextArea areaSalida; // configurar GUI y manejo de eventos public PruebaToken() { super( "Prueba de la clase StringTokenizer" ); Container contenedor = getContentPane(); contenedor.setLayout( new FlowLayout() ); indicadorEtiqueta = new JLabel( "Escriba una oracin y oprima Intro" ); contenedor.add( indicadorEtiqueta ); entradaCampo = new JTextField( 20 ); entradaCampo.addActionListener( new ActionListener() { // clase interna annima

// manejar evento de campo de texto public void actionPerformed( ActionEvent evento ) { StringTokenizer tokens = new StringTokenizer( evento.getActionCommand() ); areaSalida.setText( "Nmero de elementos: " + tokens.countTokens() + "\nLos tokens son:\n" ); while ( tokens.hasMoreTokens() ) areaSalida.append( tokens.nextToken() + "\n" );

} // fin de clase interna annima ); // fin de la llamada a addActionListener contenedor.add( entradaCampo ); areaSalida = new JTextArea( 10, 20 ); areaSalida.setEditable( false ); contenedor.add( new JScrollPane( areaSalida ) ); setSize( 275, 240 ); // establecer el tamao de la ventana setVisible( true ); // mostrar la ventana }

// ejecutar la aplicacin public static void main( String args[] ) { PruebaToken aplicacion = new PruebaToken(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } } // fin de la clase PruebaToken

Validacin de la informacin del usuario mediante expresiones regulares


import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ValidarFrame extends JFrame { private JTextField telefonoCampoTexto, codigoPostalCampoTexto, estadoCampoTexto, ciudadCampoTexto, direccionCampoTexto, nombreCampoTexto, apellidoCampoTexto; public ValidarFrame() { super( "Validacin" ); // crear los componentes de GUI JLabel telefonoEtiqueta = new JLabel( "Telfono" ); JLabel codigoPostalEtiqueta = new JLabel( "C.P." ); JLabel estadoEtiqueta = new JLabel( "Estado" ); JLabel ciudadEtiqueta = new JLabel( "Ciudad" ); JLabel direccionEtiqueta = new JLabel( "Direccin" ); JLabel nombreEtiqueta = new JLabel( "Primer nombre" ); JLabel apellidoEtiqueta = new JLabel( "Apellido paterno" ); JButton aceptarBoton = new JButton( "Aceptar" ); aceptarBoton.addActionListener( new ActionListener() { // clase interna public void actionPerformed( ActionEvent evento ) { validarFecha(); } } // fin de la clase interna ); // fin de la llamada a addActionListener telefonoCampoTexto = new JTextField( 15 ); codigoPostalCampoTexto = new JTextField( 5 ); estadoCampoTexto = new JTextField( 2 ); ciudadCampoTexto = new JTextField( 12 ); direccionCampoTexto = new JTextField( 20 ); nombreCampoTexto = new JTextField( 20 ); apellidoCampoTexto = new JTextField( 20 ); JPanel primerNombre = new JPanel(); primerNombre.add( nombreEtiqueta ); primerNombre.add( nombreCampoTexto ); JPanel apellidoPaterno = new JPanel(); apellidoPaterno.add( apellidoEtiqueta ); apellidoPaterno.add( apellidoCampoTexto ); JPanel direccion1 = new JPanel(); direccion1.add( direccionEtiqueta ); direccion1.add( direccionCampoTexto ); JPanel direccion2 = new JPanel(); direccion2.add( ciudadEtiqueta ); direccion2.add( ciudadCampoTexto ); direccion2.add( estadoEtiqueta ); direccion2.add( estadoCampoTexto ); direccion2.add( codigoPostalEtiqueta ); direccion2.add( codigoPostalCampoTexto ); JPanel telefono = new JPanel(); telefono.add( telefonoEtiqueta ); telefono.add( telefonoCampoTexto );

JPanel aceptar = new JPanel(); aceptar.add( aceptarBoton ); // agregar los componentes a la aplicacin Container contenedor = getContentPane(); contenedor.setLayout( new GridLayout( 6, 1 ) ); contenedor.add( contenedor.add( contenedor.add( contenedor.add( contenedor.add( contenedor.add( primerNombre ); apellidoPaterno ); direccion1 ); direccion2 ); telefono ); aceptar );

setSize( 400, 225 ); setVisible( true ); } // fin del constructor de ValidarFrame

public static void main( String args[] ) { ValidarFrame aplicacion = new ValidarFrame(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } // maneja el evento de accin de aceptarBoton private void validarFecha() { // asegurar que no haya cuadros de texto vacos if ( apellidoCampoTexto.getText().equals( "" ) || nombreCampoTexto.getText().equals( "" ) || direccionCampoTexto.getText().equals( "" ) || ciudadCampoTexto.getText().equals( "" ) || estadoCampoTexto.getText().equals( "" ) || codigoPostalCampoTexto.getText().equals( "" ) || telefonoCampoTexto.getText().equals( "" ) ) // fin de la condicin JOptionPane.showMessageDialog( this, "Por favor llene todos los campos" ); // si el formato de primer nombre es invlido, mostrar mensaje else if ( !nombreCampoTexto.getText().matches( "[A-Z][a-zA-Z]*" ) ) JOptionPane.showMessageDialog( this, "Primer nombre invlido" ); // si el formato de apellido paterno es invlido, mostrar mensaje else if ( !apellidoCampoTexto.getText().matches( "[A-Z][a-zA-Z]*" ) ) JOptionPane.showMessageDialog( this, "Apellido invlido" ); // si el formato de direccin es invlido, mostrar mensaje else if ( !direccionCampoTexto.getText().matches( "\\d+\\s+([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)" ) ) JOptionPane.showMessageDialog( this, "Direccin invlida" ); // si el formato de ciudad es invlido, mostrar mensaje else if ( !ciudadCampoTexto.getText().matches(

"([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)" ) ) JOptionPane.showMessageDialog( this, "Ciudad invlida" ); // si el formato de estado es invlido, mostrar mensaje else if ( !estadoCampoTexto.getText().matches( "([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)" ) ) JOptionPane.showMessageDialog( this, "Estado invlido" ); // si el formato de cdigo postal es invlido, mostrar mensaje else if ( !codigoPostalCampoTexto.getText().matches( "\\d{5}" ) ) JOptionPane.showMessageDialog( this, "Cdigo postal invlido" ); // si el formato de telfono es invlido, mostrar mensaje else if ( !telefonoCampoTexto.getText().matches( "[1-9]\\d{2}-[1-9]\\d{2}-\\d{4}" ) ) JOptionPane.showMessageDialog( this, "Nmero telefnico invlido" ); else // la informacin es vlida, avisar al usuario JOptionPane.showMessageDialog( this, "Gracias" ); } // fin del mtodo validarFecha } // fin de la clase ValidarFrame

Mtodos replaceFirst, replaceAll y Split


import javax.swing.*; public class SustitucionExpReg { public static void main( String args[] ) { String primerString = "Este enunciado termina con 5 estrellas *****"; String segundoString = "1, 2, 3, 4, 5, 6, 7, 8"; String salida = "String original 1: " + primerString; // reemplazar '*' con '^' primerString = primerString.replaceAll( "\\*", "^" ); salida += "\n^ reemplaz a *: " + primerString; // reemplazar 'estrellas' con 'intercaladores' primerString = primerString.replaceAll( "estrellas", "intercaladores" );

salida += "\n\"intercaladores\" reemplazan a \"estrellas\": " + primerString; // reemplazar palabras con 'palabra' salida += "\nCada palabra reemplazada por \"palabra\": " + primerString.replaceAll( "\\w+", "palabra" ); salida += "\n\nString original 2: " + segundoString; // reemplazar primeros tres dgitos con 'digito' for ( int i = 0; i < 3; i++ ) segundoString = segundoString.replaceFirst( "\\d", "digito" ); salida += "\nPrimeros 3 dgitos reemplazados por \"digito\" : " + segundoString; salida += "\nString dividido en las comas: ["; String[] resultados = segundoString.split( ",\\s*" ); // dividir en comas for ( int i = 0; i < resultados.length; i++ ) salida += "\"" + resultados[ i ] + "\","; // mostrar resultados // eliminar la coma adicional y agregar un corchete salida = salida.substring( 0, salida.length() - 2 ) + "]"; JOptionPane.showMessageDialog( null, salida ); System.exit( 0 ); } // fin del mtodo main } // fin de la clase SustitucionExpReg

Concordancias Expresiones Regulares, utilizando las clases Pattern y Matcher import java.util.regex.*; import javax.swing.*; class ConcordanciasExpReg { public static void main( String args[] ) { String salida = ""; // crear expresin regular

Pattern expresion = Pattern.compile( "J.*\\d[0-359]-\\d\\d-\\d\\d" ); String cadena1 = "Jacinto naci el 05-1275\n" + "Javid naci el 11-04-68\n" + "Miguel naci el 04-28-73\n" + "Juan naci el 12-17-77"; // comparar expresin regular con la cadena e imprimir concordancias Matcher matcher = expresion.matcher( cadena1 ); while ( matcher.find() ) salida += matcher.group() + "\n"; JOptionPane.showMessageDialog( null, salida ); System.exit( 0 ); } // fin de main } // fin de la clase ConcordanciasExpReg

VARIEDADES DEL OBJETO FILE Listar contenido de un directorio


import java.io.File; /** * @description Lista el contenido de un directorio mediante Java */ public class ListarContenidoDirectorio { public static void main(String[] args) { String sDirectorio = "c:\\datos"; File f = new File(sDirectorio); if (f.exists()){ // Recuperamos la lista de ficheros File[] ficheros = f.listFiles(); for (int x=0;x<ficheros.length;x++){ System.out.println(ficheros[x].getName()); } } else{ System.out.println("No existe ese directorio"); } } }

Escribir Fichero

/** * @file EscribirEnFicheroProperties.java * @description Escribir contenido sobre un fichero de texto */ import java.io.*; public class EscribirFicheroTexto { public static void main(String[] args) { // Validamos si existe el fichero String sFichero = "fichero.txt"; File fichero = new File(sFichero); if (fichero.exists()) System.out.println("El fichero " + sFichero + " ya existe"); else { try{ BufferedWriter bw = new BufferedWriter(new FileWriter(sFichero)); // Escribimos 10 filas for (int x=0;x<10;x++) bw.write("Fila numero " + x + "\n"); // Hay que cerrar el fichero bw.close(); } catch (IOException ioe){ ioe.printStackTrace(); } }

} }

Borrar Fichero
import java.io.File; /** * @file BorrarFichero.java * @description Borrar un fichero desde un programa Java */ public class BorrarFichero { public static void main(String[] args) { String sFichero = "c:\\prueba\\prueba.txt"; File f = new File(sFichero); if (f.delete()) System.out.println("El fichero " + sFichero + " ha sido borrado correctamente"); else System.out.println("El fichero " + sFichero + " no se ha podido borrar"); } }

Leer Fichero

package com.lineadecodigo.java.file; /** * @file LeerFichero.java * @descriptio Lectura del contenido de un fichero de texto */ import import import import java.io.BufferedReader; java.io.FileNotFoundException; java.io.FileReader; java.io.IOException;

public class LeerFicheroTexto { public static void main(String[] args) { try { FileReader fr = new FileReader("fichero.txt"); BufferedReader bf = new BufferedReader(fr); String sCadena; while ((sCadena = bf.readLine())!=null) { System.out.println(sCadena); } } catch (FileNotFoundException fnfe){ fnfe.printStackTrace(); } catch (IOException ioe){ ioe.printStackTrace(); } } }

Vous aimerez peut-être aussi