Apache Commons Lang

En este tutorial se verá un ejemplo que inlcuyen clases y métodos interesantes.

Apache Commons Lang

Introducción

Commons Lang es un proyecto de Jakarta que extiende la funcionalidad del
paquete estándar java.lang.

Nos proporciona un gran número de clases que nos hacen ahorrar tiempo en el
desarrollo de nuestros proyectos.

En este tutorial voy a comentar las clases y métodos que a mi personalmente
me han parecido más interesantes. Para obtener una referencia más completa y
detallada sobre el paquete puede dirigirse a la web del
proyecto

Un ejemplo del uso de Commons Lang

Voy a escribir un ejemplo autocomentado con estos métodos que a mi
personalmente me parecieron más útiles en el día a día del proceso de desarrollo
de software.

package com.autentia.tutoriales.commonsLang;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import org.apache.commons.lang.*;
import org.apache.commons.lang.mutable.MutableInt;
import org.apache.commons.lang.time.*;

/**
 * Ejemplo del uso de la librería Commons Lang
 * @author Carlos García. Autentia.
 */
public class JakartaCommonsLangExample {

	public static void main(String[] args) {
		String[] nombres = new String[0];
		int[]	 edades	 = new int[] {29, 28};
		
		// 1) Detecta si el array está vacio. Imprimiría true
		System.out.println(ArrayUtils.isEmpty(nombres));
		
		// 2) Añade dos elementos a un array.
		nombres = (String[]) ArrayUtils.add(nombres, "Carlos");
		nombres = (String[]) ArrayUtils.add(nombres, "Gema");
		System.out.println(nombres[0]);	// Imprimirá: Carlos
		
		// 3) Detecta si el array está vacio. Imprimiría false
		System.out.println(ArrayUtils.isEmpty(nombres));
		
		// 4) Convertimos de array de tipos primitivos a array de Objetos, en este caso 
   			devolvería un Integer[] (Esta sobrecargado para todos los tipos primitivos)
		Integer[] values = ArrayUtils.toObject(edades);
		System.out.println(values[0]);	// Imprimirá: 29
		
		// 5) Creamos una copia del array
		String[] nombres2 = (String[]) ArrayUtils.clone(nombres);
		
		// 6) Crea un array a partir de los elementos de dos arrays.
		String[] p2 = (String[]) ArrayUtils.addAll(nombres, nombres2);
		System.out.println(p2[0] + " " + p2[1] + " " + p2[2] + " " + p2[3]); 
		// Carlos, Gema, Carlos, Gema
	
		// 7) Vemos si un array tiene un elemento. Imprimiría: false
		System.out.println( ArrayUtils.contains( p2, "Jaime") ); 
		
		// 8) Buscamos la primera aparición de un elemento. Imprimiría: 1
		System.out.println( ArrayUtils.indexOf( p2, "Gema") ); 		
	
		// 8) Buscamos la última aparición de un elemento. Imprimiría: 3
		System.out.println( ArrayUtils.lastIndexOf( p2, "Gema") ); 	
		
		// 9: Abreviamos una cadena. Imprimiría: En un l...
		System.out.println(StringUtils.abbreviate("En un lugar de la mancha", 10));

		// 10: Elimina los saltos de linea (\r o \n o \r\n) que haya al final de una cadena.
		System.out.println(StringUtils.chomp("Linea1\n"));

		// 11: Imprimiría "A    "
		System.out.println(StringUtils.rightPad("A", 5)); 
        
		// 12: Crea un String con todos los elementos de un Array: Carlos*Gema*Carlos*Gema
		System.out.println(StringUtils.join(p2, '*'));
		
		// 13: Métodos para codificación de caracteres. Imprimiría true
		System.out.println(CharEncoding.isSupported("utf8"));
		
		GregorianCalendar c1 = new GregorianCalendar(13, 12, 1976);
		GregorianCalendar c2 = new GregorianCalendar(14, 12, 1976);
		
		// 14: Mira si dos Calendar son iguales sin comparar la hora. Imprimirá: false
		System.out.println(DateUtils.isSameDay(c1, c2));

		// 15: Convertimos milisegundos a Horas, minutos, segundos: Imprimiría: 1 0 1
		System.out.println(DurationFormatUtils.formatDuration(3601000, "H m s"));
		
		// 16: Wrappers que pueden ser modificados para los tipos primitivos.
		MutableInt n1 = new MutableInt(55);
		n1.setValue(4);
		System.out.println(n1);	// Imprimiría: 4
		
		// 17: Creamos un Integer a partir de representación en base 16.
		Integer n2 = org.apache.commons.lang.math.NumberUtils.createInteger("0xA");
		System.out.println(n2.intValue());
		
		// 18: Validación de un parámetro. Si es menor se generará una 
			java.lang.IllegalArgumentException 
			//con el mensaje: "El parámetro debe ser positivo: <elValorDeLaVariable>"
		int	i = 10;
		Validate.isTrue(i < 0, "El parámetro debe ser positivo: ", i);
		
		// 19: Validación de un parámetro. Si es null se generará una 
			java.lang.IllegalArgumentException
		String name = null;
		Validate.notNull(name, "No ha especificado el parámetro nombre");


		// 20: Validamos que todos los elementos de una colección sean de tipo String 
		ArrayList names = new ArrayList();
		names.add("1");
		names.add(new Integer(22));
		Validate.allElementsOfType(names, String.class, "Datos incorrectos");
		
		// 21: Validamos que la colección (o un array) no sea null ni tenga elementos que sean null. 
			// Generará un IllegalArgumentException en caso de que los tenga 
		Validate.noNullElements(names, "La colección no puede tener elementos null");
		
		
		// 22: Capitaliza una cadena. Imprimiría: Autentia Real Business Solutions. 
		System.out.println(WordUtils.capitalize("autentia real business solutions"));
		
		// 23: Escapa una cadena para poder ser usada en cadenas XML: 
			// Imprimiría <datos>edad > 10 && tipo=niño</datos>
		String xml = StringEscapeUtils.escapeXml("edad > 10 && tipo=niño");
		System.out.println("<datos>" + xml + "</datos>");

		// 24: Desescapa una cadena desde formato xml. Imprimiría: edad > 10 && tipo=niño
		System.out.println(StringEscapeUtils.unescapeXml(xml));		
	}
}

Conclusiones

Como veis este tutorial no tiene una elevada complejidad ni explica
tecnologías complejas, pero creo que este API es interesante y puede ahorrar
tiempo en el desarrollo de cualquier proyecto.

No obstante, en Autentia,
empresa en la cual trabajo nos preocupamos por estar informado sobre los nuevos
APIs y tecnologías disponibles en el mercado y somos partidarios de la
compartición del conocimiento asi que aquí teneis un poquito más de nuestra
aportación a nuestros lectores.

Carlos García Pérez. Creador de MobileTest, un complemento educativo para los profesores y sus alumnos.

cgpcosmad@gmail.com

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Técnico especialista en informática de empresa (CEU). Ingeniero Técnico en Informática de Sistemas (UPM) Creador de MobileTest, Haaala!, Girillo, toi18n. Charla sobre desarrollo de aplicaciones en Android. @cgpcosmad

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

02/03/2026

José Antonio Sánchez Segovia

Zephyr es un RTOS open source respaldado por la Linux Foundation que permite desarrollar dispositivos embebidos conectados, eficientes y escalables, facilitando el paso de prototipo a producto final con una arquitectura mantenible.

23/02/2026

Enrique Casado Díez

LoRa y LoRaWAN son tecnologías clave en el ecosistema IoT cuando se requiere largo alcance y bajo consumo energético. En este artículo analizamos su funcionamiento, Spreading Factor, link budget, arquitectura de red, frecuencias y clases de dispositivos, con un caso práctico real.

19/02/2026

Juan José Díaz Antuña

Copilot Chat es la forma más sencilla y segura de empezar a usar IA en Microsoft 365. En este artículo vemos cómo funciona, cómo activarlo y en qué se diferencia de Microsoft 365 Copilot, Copilot Studio y los Agentes Inteligentes, con ejemplos prácticos y una comparativa clara.