Guía para la clase StringUtils de Apache Commons en Java

G

 

Introducción

los Apache Commons La biblioteca proporciona muchas interfaces, implementaciones y clases nuevas que se expanden en el marco principal de Java. Es una de las principales bibliotecas de terceros y está presente en muchos proyectos.

En este artículo, hemos compilado una Guía para la clase StringUtils de Apache Commons, que proporciona algunas utilidades y herramientas muy buenas para trabajar con Strings, ampliando la funcionalidad de la clase principal: java.lang.String.

StringUtils es probablemente la clase más utilizada de Apache Commons, y contiene varios métodos de utilidad y conveniencia que permiten a los desarrolladores evitar escribir código repetitivo o simplemente complicado código para operaciones básicas.

¿Por qué utilizar StringUtils en lugar de String Methods?

Muchos de los métodos del StringUtils clase tienen sus equivalentes en el java.lang.String, pero los que se encuentran en StringUtils son nulo seguro. Esto significa que NullPointerExceptionLos mensajes de correo electrónico no se lanzan en casos en los que no se espera que lo hagan.

Como se mencionó anteriormente, Apache Commons contiene varios métodos, y cubriremos algunos de los más utilizados:

  • StringUtils.isEmpty () y StringUtils.isBlank ()
  • StringUtils.equals ()
  • StringUtils.compare ()
  • StringUtils.indexOf ()
  • StringUtils.lastIndexOf ()
  • StringUtils.contains ()
  • StringUtils.containsIgnoreCase ()
  • StringUtils.containsAny ()
  • StringUtils.containsNone ()
  • StringUtils.containsOnly ()
  • StringUtils.substring ()
  • StringUtils.split ()
  • StringUtils.join ()
  • StringUtils.remove ()
  • StringUtils.replace ()
  • StringUtils.countMatches ()

Introducción a Apache Commons

Para poder utilizar la biblioteca Apache Commons, primero debemos importarla a nuestro proyecto.

Si está utilizando Maven, importe el última dependencia para usted pom.xml archivo:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>

Alternativamente, si está usando Gradle:

compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.11'

Con el commons-lang3 dependencia en nuestro proyecto, podemos pasar a discutir algunos de los métodos más utilizados de StringUtils. ¡Empecemos!

Comparación de cadenas con Apache Commons

Comparar cadenas, comprobar si están vacías o en blanco, o simplemente comprobar si son iguales son operaciones bastante comunes.

Comencemos con algunos métodos relacionados con la comparación.

StringUtils.isEmpty () y StringUtils.isBlank ()

Estos dos métodos se explican por sí mismos: ambos se utilizan para comprobar si String contiene cualquier texto. Ambos regresan true Si el String de hecho está vacío. Adicionalmente, isBlank() también regresará true si un String contiene solo espacios en blanco.

También tienen sus métodos inversos: isNotEmpty() y isNotBlank().

Veamos cómo podemos usar isEmpty() junto a su contraparte java.lang.String.isEmpty(), tanto como isBlank():

String nullString = null;
String emptyString = "";
String blankString = "n t   n";

if(!nullString.isEmpty()) {
    System.out.println("nullString isn't null");
}

if(StringUtils.isEmpty(emptyString)) {
    System.out.println("emptyString is empty");
}

if(StringUtils.isBlank(blankString)) {
    System.out.println("blankString is blank");
}

Tenemos tres cadenas aquí. Uno apunta a null, el segundo no es nulo, pero no tiene ningún contenido (está vacío), y el tercero no está vacío, pero producirá un resultado en blanco si se imprime.

Ejecutar este código da como resultado:

Exception in thread "main" java.lang.NullPointerException

los isEmpty() método que está integrado en java.lang.String no es seguro para nulos. Lanzará un NullPointerException si intenta comprobar si está vacío, ya que está llamando a un método en un null referencia. Deberá verificar si la referencia es nula de antemano:

String nullString = null;
String emptyString = "";
String blankString = "n t   n";

if(nullString != null && !nullString.isEmpty()) {
    System.out.println("nullString isn't null");
}

if(StringUtils.isEmpty(emptyString)) {
    System.out.println("emptyString is empty");
}

if(StringUtils.isBlank(blankString)) {
    System.out.println("blankString is blank");
}

Ahora, esto resulta en:

emptyString is empty
blankString is blank

Y si probamos estos métodos en el nullString:

if(StringUtils.isEmpty(nullString)) {
    System.out.println("emptyString is empty");
}

if(StringUtils.isBlank(nullString)) {
    System.out.println("blankString is blank");
}

Esto resulta en:

emptyString is empty
blankString is blank

StringUtils Los métodos son seguros para nulos y producen el resultado que esperaría que estos métodos devolvieran al encontrar un null referencia.

StringUtils.equals ()

Este hace exactamente lo que crees que hace: compara dos cadenas y devuelve true, si son idénticas o ambas referencias apuntan a null, pero tenga en cuenta que este método es distingue mayúsculas y minúsculas.

Veamos cómo funciona este método:

System.out.println(StringUtils.equals(null, null));
System.out.println(StringUtils.equals(null, "some string"));
System.out.println(StringUtils.equals("some string", null));
System.out.println(StringUtils.equals("some string", "some string"));
System.out.println(StringUtils.equals("some other string", "some string"));

Esto dará como resultado:

true
false
false
true
false

Por el simple hecho de comparar el equals() método de StringUtils al java.lang.String.equals(), probémoslos:

String nullString = null;

System.out.println(StringUtils.equals(nullString, null));
System.out.println(StringUtils.equals(nullString, "string"));

System.out.println(nullString.equals(null));
System.out.println(nullString.equals("string"));

Esto resulta en:

true
false
Exception in thread "main" java.lang.NullPointerException

Nuevamente, invocando un método en un null resultados de referencia en un NullPointerException, tendríamos que comprobar si la variable de referencia es null antes de usarlo.

StringUtils.compare ()

La declaración de este método es la siguiente:

public static int compare(CharSequence str1, CharSequence str2)

Este método compara dos Strings lexicográficamente, de la misma manera java.lang.String.compareTo() hace, regresando:

  • 0 Si str1 es igual a str2 (o ambos son null)
  • Un valor menor que 0 Si str1 es menos que str2
  • Un valor mayor que 0 Si str1 es mayor que str2

En este artículo no discutiremos qué es exactamente comparar dos Strings lexicográficamente significa, así que si está interesado en leer más sobre eso, consulte esta enlace.

Ahora, veamos cómo podemos usarlo en nuestro programa:

System.out.println(StringUtils.compare(null, null));
System.out.println(StringUtils.compare(null , "a"));
System.out.println(StringUtils.compare("a", null));
System.out.println(StringUtils.compare("a", "A"));
System.out.println(StringUtils.compare("a", "a"));

Esto a su vez generará:

0
-1
1
32
0

No hay té null El valor se considera menor que un valor nonull valor. Dos null los valores se consideran iguales.

Indexación de secuencias de búsqueda con Apache Commons

Ahora, echemos un vistazo a un grupo de métodos que se ocupan de las comprobaciones de índices, por supuesto, nulo seguro camino. Todos estos métodos tienen múltiples variantes sobrecargadas, pero las más generales son:

public static int indexOf(CharSequence seq, CharSequence searchSeq)
public static int lastIndexOf(CharSequence seq, CharSequence searchSeq)
public static boolean contains(CharSequence seq, CharSequence searchSeq)

Hay una cosa que todos tienen en común: todos usan susnull variantes seguras de java.lang.String si es posible hacerlo. Expliquemos esto con un poco más de detalle.

StringUtils.indexOf ()

Este método, al igual que el integrado, buscará el índice de la primera aparición de una secuencia dentro de otra secuencia. Si el incorporado java.lang.String.indexOf() el método no produce un NullPointerException, se utilizará. Si no, la implementación de Apache Commons se hace cargo.

El valor de retorno es el primer índice encontrado, o -1 si no hay coincidencia o la cadena de entrada es null.

Escribamos un código ahora:

String s = "Java is a general-purpose programming language";

System.out.println(StringUtils.indexOf(null, "a"));
System.out.println(StringUtils.indexOf(s, "general"));
System.out.println(StringUtils.indexOf(s, "l"));
System.out.println(StringUtils.indexOf(s, "lan"));

Ejecutar el código anterior dará como resultado el siguiente resultado:

-1
10
16
38

StringUtils.lastIndexOf ()

los lastIndexOf() El método funciona de la misma manera indexOf() funciona, pero devuelve la última aparición, no la primera de la secuencia de búsqueda.

Ejecutemos el mismo código de antes:

String s = "Java is a general-purpose programming language";

System.out.println(StringUtils.lastIndexOf(null, "a"));
System.out.println(StringUtils.lastIndexOf(s, "general"));
System.out.println(StringUtils.lastIndexOf(s, "l"));
System.out.println(StringUtils.lastIndexOf(s, "lan"));

Ejecutar el código anterior dará como resultado el siguiente resultado:

-1
10
38
38

Compruebe si la cadena contiene otra cadena con Apache Commons

StringUtils.contains ()

los contains() devuelve el método true o false basado en si una secuencia de búsqueda está contenida dentro de otra secuencia o no.

Si tiene éxito, este método también utiliza el java.lang.String.indexOf(String). En el caso de null como entrada, false es regresado:

String s = "Java is a general-purpose programming language";

System.out.println(StringUtils.contains(null, "a"));
System.out.println(StringUtils.contains(s, "Java"));
System.out.println(StringUtils.contains(s, "Python"));
System.out.println(StringUtils.contains(s, "pRoGrAmMinG"));

El método, por supuesto, si distingue entre mayúsculas y minúsculas, por lo que la última llamada también devolverá false:

false
true
false
false

StringUtils.containsIgnoreCase ()

los containsIgnoreCase() El método funciona de la misma manera contains() el método lo hace, pero no distingue entre mayúsculas y minúsculas:

String s = "Java is a general-purpose programming language";

System.out.println(StringUtils.containsIgnoreCase(null, "a"));
System.out.println(StringUtils.containsIgnoreCase(s, "Java"));
System.out.println(StringUtils.containsIgnoreCase(s, "Python"));
System.out.println(StringUtils.containsIgnoreCase(s, "pRoGrAmMinG"));

Esto resulta en:

false
true
false
true

StringUtils.containsAny ()

los containsAny() la verificación del método acepta un vararg, además del String en el que estamos buscando. true si la secuencia buscada contiene algún elemento del vararg:

String s = "Java is a general-purpose programming language";

System.out.println(StringUtils.containsAny(s, "general", "python", "something", "javascript"));

Esto resulta en:

true

Este método también distingue entre mayúsculas y minúsculas, así que asegúrese de tenerlo en cuenta.

StringUtils.containsNone ()

En lugar de hacer casos extremos con el método anterior, simplemente puede usar containsNone() si desea asegurarse de que una cadena no contenga ninguno de los elementos que ingresó como vararg:

String s = "Java is a general-purpose programming language";

System.out.println(StringUtils.containsNone(s, "general", "python", "something", "javascript"));

Esto resulta en:

false

StringUtils.containsOnly ()

O, si desea verificar si una cadena contiene solo el contenido que predefinió, puede usar el containsOnly() método:

String s = "Java";

System.out.println(StringUtils.containsOnly(s, "Java"));

Esto resulta en:

true

Métodos de subcadena de Apache Commons

StringUtils.substring ()

Entre muchas de las variantes sobrecargadas disponibles de este método, discutiremos dos de ellas:

  • substring(String str, int start)
  • substring(String str, int start, int end)

Este método devuelve una subcadena que comienza en el start yendo al final de la String, o la end índice.

También podemos usar un número negativo para start parámetro, que nos dará una subcadena que comienza n personajes del final del String.

Si hay un null entrada, el valor devuelto simplemente será null.

Veamos cómo podemos usarlo:

System.out.println(StringUtils.substring("a random string", 4, 8));
System.out.println(StringUtils.substring("a random string", -7));
System.out.println(StringUtils.substring(null, 5));

Ejecutar el código anterior nos da:

ndom
 string
null

StringUtils.split ()

Provisto de un String y un carácter separador, este método dividirá el String y colóquelo en una matriz.

Los elementos de la matriz resultante son subcadenas que están delimitadas por separadores en el original. String. El separador no se incluye en la matriz final después de la división.

Al igual que con los otros métodos en el StringUtils, vuelve null si la entrada es null.

Veamos algo de código y cómo funciona este método:

String csvString = "Id, Name, Age, Location";
    	
System.out.println(Arrays.toString(StringUtils.split(csvString, ',')));
System.out.println(Arrays.toString(StringUtils.split(null, '.')));
System.out.println(Arrays.toString(StringUtils.split("", '.')));

Después de ejecutar el código, obtenemos:

[Id,  Name,  Age,  Location]
null
[]

StringUtils.join ()

Este método representa el opuesto directo del split() método.

Después de dividir un String con un carácter separador, podemos unirlo fácilmente con el join() método, proporcionando una lista o una matriz de elementos. Devuelve un String creado pegando los elementos proporcionados juntos usando el separador. Si la entrada es null, el método devuelve null.

Veamos este ejemplo básico:

String csvString = "Id, Name, Age, Location";
    	
String[] myStr =  StringUtils.split(csvString, ',');
System.out.println(StringUtils.join(myStr, ';'));

Ejecutar el código anterior nos da:

Id; Name; Age; Location

StringUtils.remove ()

Hay dos variantes de este método que queremos ver:

public static String remove(String str, char remove)
public static String remove(String str, String remove)

Ambos hacen lo mismo, con la excepción de que el segundo elimina cada ocurrencia de un subcadena, mientras que el primero elimina toda aparición de un personaje de lo dado String str.

Si la entrada es null, el método devuelve null.

Para este, dividiremos los ejemplos en dos bloques de código separados, porque puede ser un poco difícil diferenciarlos a primera vista. Empecemos con remove(String str, char remove):

System.out.println(StringUtils.remove(null, 'a'));
System.out.println(StringUtils.remove("", 'a'));
System.out.println(StringUtils.remove("queued", 'u'));

System.out.println(StringUtils.remove(null, "abc"));
System.out.println(StringUtils.remove("", "abc"));
System.out.println(StringUtils.remove("abc", null));
System.out.println(StringUtils.remove("queued", "ue"));

Ejecutemos esto y veamos qué produce:

null // Returned null
     // Removed 'a' from ""
qeed // Removed 'u' characters
null // Returned null
     // Removed "abc" from ""
abc  // Removed null from "abc"
qd   // Removed "ue" from "queued"

Debemos señalar una cosa aquí, ya que se puede pasar por alto fácilmente: cuando el remove el parámetro tiene un null valor, se devuelve la cadena de origen.

StringUtils.replace ()

Como la mayoría de los métodos que hemos cubierto, este también se explica por sí mismo: busca un String Dentro de un String, lo encuentra si existe y reemplaza todas sus ocurrencias con un nuevo String.

La declaración de este método es la siguiente:

public static String replace(String text, String searchString, String replacement)

Si el searchString no se encuentra dentro text, no pasa nada, y nuestro text Sigue igual. Siguiendo la misma lógica, si text es null, este método devuelve null.

Si alguno de searchString o replacement tener el valor de null, el método devuelve su fuente, es decir text.

Probemos este método:

String string = "a simple sentence";
System.out.println(StringUtils.replace(string, "simple", "complicated"));

Esto resultará en:

a complicated sentence

StringUtils.countMatches ()

countMatches() cuenta cuántas veces aparece un carácter especificado (o una subcadena) dentro de la Cadena dada. UN null o una entrada vacía regresa 0.

Veamos cómo funciona esto en código:

String string = "I'm blue Da ba dee da ba di, Da ba dee da ba di";

System.out.println(StringUtils.countMatches(null, 'd'));
System.out.println(StringUtils.countMatches(string, 'd'));

System.out.println(StringUtils.countMatches(null, "da"));
System.out.println(StringUtils.countMatches(string, "da"));

Ejecutar el código anterior nos da:

0
6
0
2

Conclusión

En este artículo, hemos cubierto algunos de los métodos más utilizados y conocidos dentro del Apache Commons ‘ StringUtils clase.

Los métodos encontrados en el StringUtils class son seguros para nulos y proporcionan funcionalidad básica y extendida a los métodos String incorporados.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad