Busca en simplementeJava

domingo, 20 de febrero de 2011

Regular Expresion Library

Ya sé que me estoy poniendo pesado con esto de las expresiones regulares, pero creo que vale la pena que os traiga la página RegExLib. Por lo que se ve estos chavales pensaron que es un rollo tener que pensar desde cero cualquier expresión regular que necesites, de forma que se les ocurrió montar un repositorio de expresiones regulares de forma que nos evitemos tener que inventar la rueda cada vez. La página además cuenta con un buscador para ayudarnos a encontrar la expresión regular que nos interesa en cada momento.

Un detalle más, si os interesa demostrar vuestra admiración por las expresiones regulares en esta página podéis adquirir por 20$ una camiseta con la imagen que acompaña a esta entrada.

sábado, 19 de febrero de 2011

Regular Expresion Tester para Firefox

Gracias a mi compañero Atmosphear_ he conocido este pequeño este pequeño add-on para firefox que nos permite evaluar expresiones regulares con las cadenas que queramos y nos indica cuando cumplen la expresión y cuando no.

Lo podéis descargar desde esta ruta o simplemente buscando 'regular expresion tester' en el gestor de añadidos de firefox.

Espero que os sea tan útil como a mí.

viernes, 18 de febrero de 2011

Expresiones regulares

Sinceramente creo que esta es una de las herramientas más interesantes de las que se dispone para el tratamiento de textos. Para quien no las conozca las expresiones regulares son ‘fórmulas’ que validan textos siguiendo una serie de sencillas reglas, la notación es bastante simple una vez que te acostumbras y la potencia es realmente increíble. Ahora sí, requiere algo de experiencia y construir la expresión con bastante cuidado, ya que esta misma potencia hace que pequeños cambios provoquen grandes diferencias en los resultados.

Si os interesa el tema en esta página hay toda la información sobre expresiones regulares que podáis necesitar. Si las estáis estudiando ahora mismo en la ingeniería mucho ánimo, como he comentado antes es de lo más interesante que os van a enseñar, así que no desaprovechéis el esfuerzo.

Pero... ¿qué son exactamente? Pues básicamente definen patrones de texto. Normalmente se utilizan para comprobar que un texto de entrada coincide con el patrón definido para el mismo. Por ejemplo, para un ejemplo sencillo podemos construir una expresión regular que nos valide una cadena compuesta solo por letras que empieza por mayúscula y después tiene un número indeterminado de minúsculas:


^[A-Z]{1}[a-z]*$


Como veis es bastante simple. Además la clase String de java nos proporciona el método matches que nos indica si la cadena coincide con la expresión regular pasada por parámetro. Así el código java para comprobar si nuestra cadena coincide con el patrón definido sería:


...
private static final String PATRON = “^[A-Z]{1}[a-z]*$”;
...
String cadenaAValidar = …
if (cadenaAValidar.matches(PATRON)) {
...
}
else {
...
}
...


Como veis este ejemplo es en realidad bastante sencillo, pero plantearos la siguiente pregunta: ¿cómo tendríamos que hacerlo sin usar una expresión regular? ¿Cuántas líneas de código y posibilidades de error nos llevaría una solución ‘programática’?

Esto tiene muchísimas utilidades, desde validaciones simples como la del ejemplo, búsquedas en textos, creación de lenguajes de programación y sus compiladores, … Pero creo que el mejor ejemplo nos lo proporciona la siguiente viñeta de xkcd.

jueves, 10 de febrero de 2011

Eclipse Orion: Desarrollo web en la web

El mes pasado el equipo de desarrollo de Eclipse nos sorprendió en esta entrada de su blog con la última vuelta de tuerca de su IDE. Esta nueva versión se llamará Orion siguiendo con la estrategia de nombrar las versiones como distintos objetos celestes.

¿Cuál es la sorpresa de esta nueva versión? Pues simplemente que en lugar de tener un IDE pesado instalado en nuestras máquinas nos proponen el uso de un IDE ligero que se ejecutará en nuestro navegador.

A simple vista las ventajas son evidentes: no hay mantenimiento, se supone que necesitará menos recursos de la máquina, las actualizaciones son literalmente automáticas,... además como curiosidad va mucho en la línea de los desarrollos para Google Chrome OS. Además promenten que el IDE funcionará con las diferentes pestañas del navegador ofreciendo una experiencia de uso tipo 'web'.

Pero tranquilos, antes de que os pongáis a buscar en que web está disponible esta fantástica herramienta ya nos indican que no está acabada. De hecho apelan a nuestro corazoncito de desarrolladores para que entendamos que el proyecto es muy grande y que esperan construirlo a base de las aportaciones de toda la comunidad Eclipse.

La verdad es que miedo da pensar en desarrollar algo tan complejo como un IDE en javascript para que funcione en todo tipo de navegadores y de una experiencia de uso mínimamente agradable. Además creo que las desventajas también son evidentes, habrá que ver cómo se comporta cuando la carga de trabajo sea grande, si para acceder a él tendremos que usar un servidor de pago, cómo podremos realizar nuestras pruebas usando servidores de aplicaciones, ...

En resumen una idea curiosa que puede ser un grandísimo éxito o un enorme fracaso.

sábado, 5 de febrero de 2011

Pequeña clase para traducir ficheros

Como sabéis me llevo unos días peleando con las codificaciones de caracteres de los ficheros. Para mis pruebas he montado una pequeña clase que convierte un fichero en un encoding en otro con el mismo contenido pero con encoding diferente. Os aseguro que ha sido muy útil para mis pruebas.

El único detalle a tener en cuenta es que los nombres de los encodings que pasamos por parámetro tienen que coincidir con los que nos indican en esta tabla.

Os dejo el código básico comentado para vuestro uso y disfrute. Espero que os sirva tanto como a mí.


package org.sj.encodings;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class Translator {

/** Salto de línea. */
private static final String SALTO_DE_LINEA = "\n";

/**
* Traduce el fichero de entrada al fichero de salida con los encodings
* indicados.
* @param inFile fichero de entrada
* @param inputEncoding codificación de caracteres del fichero de entrada
* @param outputFile fichero de salida
* @param outputEncoding codificación de caracteres del fichero de salida
*/
public void translator(File inFile, String inputEncoding, File outputFile,
String outputEncoding)
throws UnsupportedEncodingException, FileNotFoundException,
IOException {
// abrimos un stream sobre el fichero de entrada
FileInputStream fis = new FileInputStream(inFile);
// indicamos el encoding con el que leeremos
InputStreamReader in = new InputStreamReader(fis, inputEncoding);
// incluímos un buffer para mejorar la lectura
BufferedReader br = new BufferedReader(in);

// abrimos un stream sobre el fichero de salida
FileOutputStream fos = new FileOutputStream(outputFile);
// indicamos el encoding con el que escribiremos
OutputStreamWriter out = new OutputStreamWriter(fos, outputEncoding);
// incluímos un buffer para mejorar la escritura
BufferedWriter bw = new BufferedWriter(out);

// línea actual
StringBuffer line;
// leemos el fichero de entrada y lo escribimos en la salida.
while (br.ready()) {
line = new StringBuffer();
line.append(br.readLine());
line.append(SALTO_DE_LINEA);
bw.write(line.toString());
}
}
}