Apache LogoHay varias porciones de código y tareas que debemos repetir en varios programas Java, sin importar de qué se traten funcionalmente. Muchas veces el JDK nos es de ayuda, pero otras tantas veces necesitamos métodos "utilitarios" que no están por ningún lado en el JDK... y en consecuencia terminamos programando estas funciones "a mano" para cada proyecto.

Aquí es donde aparece Apache Commons Lang para ayudarnos con una gran cantidad de clases utilitarias.

Introducción a Apache Commons Lang

Apache Commons Lang, un compendio de clases utilitarias con montones de métodos para manipular a las clases estándar de Java. Este componente brinda muchas utilidades para el API de java.lang, especialmente métodos de manipulación para String, números, reflexión de objetos, creación y serialización. También brinda algunas mejoras básicas para java.util.Date y un conjunto de utilidades para construir métodos básicos, como el hashCode, toString y equals.

A continuación vamos a ver algunos ejemplos básicos de Apache Commons Lang.

StringUtils: manipulando a String

La clase org.apache.commons.lang.StringUtils tiene operaciones sobre String que son seguros de usar con un null. Entre los métodos más importantes de esta clase se pueden nombrar:

  • isEmpty / isBlank - comprueba si un String contiene texto.
  • trim / strip - quita los espacios al principio y final de un texto.
  • equals - compara dos String, y se puede usar con null.
  • replace / overlay - busca una cadena dentro de un String y lo reemplaza con otro.
  • countMatches - cuenta la cantidad de ocurrencias de un String dentro de otro.
  • abbreviate - abrevia la longitud de un String usando puntos suspensivos.

Ejemplos

 
//imprime "Habia una..."
System.out.println(StringUtils.abbreviate("Habia una vez", 8));
 
//imprime "Chau mundo, Chau mundo"
System.out.println(StringUtils.replace("Hola mundo, Hola mundo", "Hola", "Chau"));
//imprime "-        hola        -"
System.out.println("-" + StringUtils.center("hola", 20) + "-");
 

Otra clase utilitaria para manipular String pero a nivel de "palabra" es org.apache.commons.lang.WordUtils.

ArrayUtils: manipulando a arrays

La clase org.apache.commons.lang.ArrayUtils tiene operaciones sobre arrays, arrays de primitivos (como int[]) y arrays de wrappers de primitivos (como Integer[]).

Los métodos de esta clase permiten agregar y quitar elementos de un array, buscar y compararlos.

Ejemplos

 
String[] nombres = new String[0];
int[] edades = new int[] {29, 28, 20};
 
//imprime "true"
System.out.println(ArrayUtils.isEmpty(nombres));
 
//agrega elementos a un array
nombres = (String[]) ArrayUtils.add(nombres, "Zim");
nombres = (String[]) ArrayUtils.add(nombres, "GIR");
 
//imprime "2"
System.out.println(nombres.length);
 
//convierte un array primitivo en su equivalente en objetos
Integer[] edadesInteger = ArrayUtils.toObject(edades);
 
//imprime "3"
System.out.println(edadesInteger.length);
 
//clona un array
Integer[] otrasEdades = (Integer[]) ArrayUtils.clone(edadesInteger);
 
//agrega los elementos de un array a otro
Integer[] todasEdades = (Integer[]) ArrayUtils.addAll(otrasEdades, edadesInteger);
 
//imprime "6"
System.out.println(todasEdades.length);
 
//imprime "true"
System.out.println(ArrayUtils.contains(nombres, "GIR"));
 
//imprime "1"
System.out.println(ArrayUtils.indexOf(nombres, "GIR"));

Validate: realizando validaciones

La clase org.apache.commons.lang.Validate asiste la validación de argumentos. En caso de que una validación falle, tira una IllegalArgumentException (con un posible mensaje personalizado).

Ejemplo

 
//valida si el primitivo "param" es mayor a cero
Validate.isTrue(param > 0, "El parametro tiene que ser menor a cero")
 
//valida si un array o Collection son vacios
Validate.notEmpty(parametros);
 
//valida si un array o Collection contiene elementos nulos
Validate.noNullElements(parametros, "Todos los parametros son obligatorios")
 

StringEscapeUtils: escapando caracteres especiales

La clase org.apache.commons.lang.StringEscapeUtils se encarga de escapar y des-escapar caracteres especiales de un String para Java, JavaScript, HTML, XML y SQL. Algunos de sus métodos:

  • escapeJava - escapa un String usando las reglas de Java. Por ejemplo, un tab se convierte en \\t, y las comillas dobles en \\"
  • escapeHtml - escapa un String usando entidades de HTML. Por ejemplo, el String computación se convierte en computación
  • escapeXml - escapa un String usando entidades de XML.

Ejemplo

 
//imprime "<planeta>J&#250;piter</planeta>"
String xml = "<planeta>Júpiter</planeta>";
System.out.println(StringEscapeUtils.escapeXml(xml));
 

Conclusión

Las utilidades de Apache Commons Lang resuelven muchos problemas que se repiten en diversos programas Java, y nos permiten ahorrar tiempo y esfuerzo en crear código que termina siendo repetitivo.

En este artículo vimos algunas de todas las utilidades de Apache Commons Lang, en particular las que se incluyen en el paquete org.apache.commons.lang. En próximos artículos vamos a repasar a otras de las utilidades que nos brinda esta librería.

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw