Expresiones Regulares – Java

El trabajo con expresiones regulares en java es relativamente sencillo y útil. A continuación un ejemplo de como reemplazar varios espacios en blanco por uno solo.

Primero, crear un compilado de la expresión regular mediante la clase Pattern, especificando que se buscará un conjunto de espacios de 1 ó más.

Pattern patron = Pattern.compile("[ ]+");

Creamos un objeto Matcher que permitirá establecer las coincidencias dentro de la cadena basados en el compilado anterior.

Matcher encaja = patron.matcher("x     000000000    estado    buenos    malos    rrrr");

Ejecutamos la operación de reemplazo para todas las cadenas que coincidan con nuestro patrón.

String resultado = encaja.replaceAll(" ");

Lo que obtendremos será de una cadena inicial:

x     000000000    estado    buenos    malos    rrrr

algo como

x 000000000 estado buenos malos rrrr

Saludos.

Anuncios

ResultSet closed – mysql – java

Nuevamente me encuentro con esta situación, así que mejor la coloco como un post en el blog para tenerla luego como referencia y haber si a alguien más le sirve.
Cuando se está iterando un ResultSet en java como resultado de una consulta hacia MySql (jdbc) es muy común querer extraer más datos por cada iteración, es decir ejecutar una nueva consulta dentro del while que está iterando y recibir una excepción del tipo:

java.sql.SQLException: Operation not allowed after ResultSet closed

La misma que puede ser generada con un código parecido a este:

Statement st_A = conexion.createStatement();
ResultSet rs_A = st_A.executeQuery("cualquierConsulta");
while(rs_A.next()){
ResultSet rs_B = st_A.executeQuery("otraConsulta");
}

El origen es muy simple, cada vez que se realiza la ejecución de una sentencia en el ‘Statement’ todos los ‘ResultSet’ asociados a este son cerrados por lo que iterarlos ya no es posible (el programa anterior fallará luego de la primer iteración).

Una solución que encontré a esto es crear ‘Statement’ separados por cada uno de los ‘ResultSet’ de la siguiente forma:

Statement st_A = conexion.createStatement();
ResultSet rs_A = st_A.executeQuery("cualquierConsulta");
while(rs_A.next()){
Statement st_B = conexion.createStatement();
ResultSet rs_B = st_B.executeQuery("otraConsulta");
}

Saludos.

Iterar HashMap – JAVA

La estructuras del tipo HashMap permiten almacenar contenido relacionado de la forma LLAVE –> VALOR. Una estructura de este tipo es útil cuando existen referencias a valores de los cuales se desea saber su correspondencia con otro valor. Evitando el uso de las estructuras IF y SWITCH.

Aunque presenta  todas estas ventajas uno de sus inconvenientes, muchas de las veces, es el iterar sus elementos uno a uno. A continuación el proceso a seguir ::

Creamos un HashMap para almacenar una llave de tipo caracter y su valor entero.

HashMap<String, Integer> ht = new HashMap<String, Integer>();

Si poseemos elementos en ella podremos iterarlos uno a uno, haciendo uso de un FOREACH en base a Map.Entry para ello ::

for (Map.Entry<String, Integer> elemento : ht.entrySet()) {
     System.out.println(elemento.getKey() + " _ " + elemento.getValue());
}

Hay que recordar que el elemento a iterar deberá ser de el mismo tipo que el HashMap, en este caso <String, Integer>. Aquí un proyecto en NetBeans implementando esta utilidad.

Saludos.

Encadenamiento Hacia Delante (EHD)

El encadenamiento hacia delante aplicado a la lógica de predicados permite inferir conocimiento (o comprobarlo) mediante la utilización de varias reglas predefinidas. Aquí pueden encontrar un programa desarrollado completamente en JAVA bajo NetBeans.

El mismo se basa en un conjunto de hechos y reglas que son dados como entrada a partir de los cuales se realiza interacciones sucesivas hasta que no se pueda inferir más premisas.

Espero les resulte útil.

 

Saludos.

PD: El programa utiliza un Look&Feel de Substance, por tanto hay que importarlo primero, se encuentra en la misma carpeta del proyecto.

 

Encriptación MD5 – JAVA

Más de una vez se suele necesitar cifrar información sensible como contraseñas o códigos de aplicación. En esta ocasión realizaré la encriptación basada en MD5. Pero de forma recursiva 😉 De tal forma que tendremos la siguiente fórmula de encriptación:

MD5(MD5(MD5(PASSWORD) + MD5(SEMILLA)))

La que utiliza una semilla para garantizar más aún nuestros datos. Y como era de suponer JAVA posee una clase que nos permite aplicar MD5 a una cadena, la misma que es MessageDigest. Para ello:

Especificamos la Instancia del Algoritmo (también podemos hacerlo con SHA pero no es el caso)

MessageDigest md = MessageDigest.getInstance(“MD5”);

Indicamos los caracteres contenidos en la clave y su longitud.

md.update(clave.getBytes(“UTF-8”), 0, clave.length());

Debido a que la clase MessageDigest devuelve el valor como un vector de bytes, deberemos realizar el siguiente proceso para transformar bytes–>BigInteger–>String

byte[] bt = md.digest();

BigInteger bi = new BigInteger(1, bt);

String md5 = bi.toString(16);  //16 por hexadecimal.

Con este principio lo que se debe hacer es realizar las llamadas a un método en el orden correcto para conseguir nuestro objetivo del principio. Aquí pueden encontrar la implementación en un proyecto de NetBeans con una interfaz gráfica.
Saludos.

qmarqeva

Convertir Hexadecimal a Binario (hex to binary)

Más de una vez se presenta la necesidad de convertir un número de Hexadecimal a Binario, ya sea para cálculos o para extraer cada uno de los bits, como es mi caso y utilizando JAVA es tan sencillo como:

Transformar un String a Hexadecimal:

int numHex = Integer.parseInt("AA", 16);

Transformar el número Hexadecimal a Binario

String binary = Integer.toBinaryString(numHex);

y listo nuestra salida será similar a esto:

10101010

En el siguiente código(en NetBeans) pueden probarlo, además hay una función para completar el número de bits que necesitan en su número binario resultante.

Saludos.

Leer un Archivo TXT desde JAVA

Muchas de las veces es necesario trabajar en nuestras aplicaciones con datos externos que se encuentran en un archivo. Bueno puse para ello podemos intentar copiar cada uno de ellos dentro de nuestra aplicación cuando los necesitemos que sería lo más fácil si son pocos datos pero que sucede si son cientos?? O miles?? Pues ahí es donde se hace más fácil leer un archivo externo y cargarlo a nuestra aplicación.

Para ello podemos hacer lo siguiente utilizando las librerías dentro del paquete java.io:

Cargamos la ruta de un archivo:

File archivo = new File("C:\\ demo.txt");

Creamos una estructura del tipo FileReader:

FileReader    fileR = new FileReader(archivo);

Lo cargamos en un buffer de lectura para que pueda ser más fácil la lectura:

BufferedReader bufferR = new BufferedReader(fileR);

Con ello podremos recuperar una a una las líneas del archivo mediante:

bufferR.readLine()

Aquí un ejemplo sencillo utilizando un archivo separado por comas (su lectura es igual). descarga

Saludos,