Conversiones de matriz a cadena

1. Información general

En este breve tutorial, veremos cómo convertir una matriz de cadenas o números enteros en una cadena y viceversa.

Podemos lograr esto con las clases de utilidad Java vanilla y Java de las bibliotecas de uso común.

2. Convertir matriz en cadena

A veces necesitamos convertir una matriz de cadenas o números enteros en una cadena, pero desafortunadamente, no existe un método directo para realizar esta conversión.

La implementación predeterminada del método toString () en una matriz devuelve algo como Ljava.lang.String; @ 74a10858 que solo nos informa del tipo de objeto y el código hash.

Sin embargo, la clase de utilidad java.util.Arrays admite la manipulación de cadenas y matrices, incluido un método toString () para matrices.

Arrays.toString () devuelve una cadena con el contenido de la matriz de entrada. La nueva cadena creada es una lista delimitada por comas de los elementos de la matriz, rodeada de corchetes (“[]”):

String[] strArray = { "one", "two", "three" }; String joinedString = Arrays.toString(strArray); assertEquals("[one, two, three]", joinedString);
int[] intArray = { 1,2,3,4,5 }; joinedString = Arrays.toString(intArray); assertEquals("[1, 2, 3, 4, 5]", joinedString);

Y, aunque es genial que el método Arrays.toString (int []) nos facilite esta tarea tan bien, comparémosla con diferentes métodos que podemos implementar por nuestra cuenta.

2.1. StringBuilder.append ()

Para empezar, veamos cómo hacer esta conversión con StringBuilder.append () :

String[] strArray = { "Convert", "Array", "With", "Java" }; StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < strArray.length; i++) { stringBuilder.append(strArray[i]); } String joinedString = stringBuilder.toString(); assertEquals("ConvertArrayWithJava", joinedString);

Además, para convertir una matriz de números enteros, podemos usar el mismo enfoque pero en su lugar llamar a Integer.valueOf (intArray [i]) cuando agregamos a nuestro StringBuilder .

2.2. API de Java Streams

Java 8 y superior ofrece el método String.join () que produce una nueva cadena uniendo elementos y separándolos con el delimitador especificado, en nuestro caso solo una cadena vacía:

String joinedString = String.join("", new String[]{ "Convert", "With", "Java", "Streams" }); assertEquals("ConvertWithJavaStreams", joinedString);

Además, podemos usar el método Collectors.joining () de la API de Java Streams que une cadenas de Stream en el mismo orden que su matriz de origen:

String joinedString = Arrays .stream(new String[]{ "Convert", "With", "Java", "Streams" }) .collect(Collectors.joining()); assertEquals("ConvertWithJavaStreams", joinedString);

2.3. StringUtils.join ()

Y Apache Commons Lang nunca debe quedarse fuera de tareas como estas.

La clase StringUtils tiene varios métodos StringUtils.join () que se pueden usar para cambiar una matriz de cadenas en una sola cadena:

String joinedString = StringUtils.join(new String[]{ "Convert", "With", "Apache", "Commons" }); assertEquals("ConvertWithApacheCommons", joinedString);

2.4. Joiner.join ()

Y para no quedarse atrás, Guava se adapta a lo mismo con su clase Joiner . La clase Joiner ofrece una API fluida y proporciona un puñado de métodos auxiliares para unir datos.

Por ejemplo, podemos agregar un delimitador u omitir valores nulos:

String joinedString = Joiner.on("") .skipNulls() .join(new String[]{ "Convert", "With", "Guava", null }); assertEquals("ConvertWithGuava", joinedString);

3. Convertir cadena en matriz de cadenas

De manera similar, a veces necesitamos dividir una cadena en una matriz que contiene algún subconjunto de cadena de entrada dividida por el delimitador especificado, veamos cómo podemos hacerlo también.

3.1. String.split ()

En primer lugar, comencemos por dividir el espacio en blanco usando el método String.split () sin un delimitador:

String[] strArray = "loremipsum".split("");

Que produce:

["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]

3.2. StringUtils.split ()

En segundo lugar, veamos nuevamente la clase StringUtils de la biblioteca Commons Lang de Apache.

Entre muchos métodos seguros para nulos en objetos de cadena, podemos encontrar StringUtils.split (). De forma predeterminada, asume un delimitador de espacios en blanco:

String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");

Lo que resulta en:

["lorem", "ipsum", "dolor", "sit", "amet"]

Pero también podemos proporcionar un delimitador si queremos.

3.3. Divisor.split ()

Finalmente, también podemos usar Guava con su API fluida Splitter :

List resultList = Splitter.on(' ') .trimResults() .omitEmptyStrings() .splitToList("lorem ipsum dolor sit amet"); String[] strArray = resultList.toArray(new String[0]);

Que genera:

["lorem", "ipsum", "dolor", "sit", "amet"]

4. Conclusión

En este artículo, ilustramos cómo convertir una matriz en una cadena y viceversa utilizando Java central y bibliotecas de utilidades populares.

Por supuesto, la implementación de todos estos ejemplos y fragmentos de código se puede encontrar en GitHub.