En Java, las matrices no se anulan toString()
, por lo que si intenta imprimir una directamente, obtendrá el className
+ '@' + el hexadecimal hashCode
de la matriz, según lo definido por Object.toString()
:
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
Pero por lo general, en realidad nos gustaría algo más parecido [1, 2, 3, 4, 5]
. ¿Cuál es la forma más sencilla de hacer eso? Aquí hay algunos ejemplos de entradas y salidas:
// Array of primitives:
int[] intArray = new int[] {1, 2, 3, 4, 5};
//output: [1, 2, 3, 4, 5]
// Array of object references:
String[] strArray = new String[] {"John", "Mary", "Bob"};
//output: [John, Mary, Bob]
hashCode()
en hexadecimal. VerObject#toString()
.Respuestas:
Desde Java 5 puede usar
Arrays.toString(arr)
oArrays.deepToString(arr)
para matrices dentro de matrices. Tenga en cuenta que laObject[]
versión llama.toString()
a cada objeto en la matriz. La salida incluso está decorada de la manera exacta que está preguntando.Ejemplos:
Matriz simple:
Salida:
Matriz anidada:
Salida:
double
Formación:Salida:
int
Formación:Salida:
fuente
String[] array = {"John", "Mahta", "Sara"}
y queremos esta salida sin corchetes y comasJohn Mahta Sara
:?Arrays.deepToString()
acepta solo unaObject []
(o una matriz de clases que se extiendenObject
, por ejemploInteger
, por lo que no funcionará en una matriz primitiva de tipoint []
. PeroArrays.toString(<int array>)
funciona bien para matrices primitivas.)System.out.println(String.join(" ", new String[]{"John", "Mahta", "Sara"}))
imprimiráJohn Mahta Sara
.String.join(" ", "John", "Mahta", "Sara")
porque el.join(...)
método toma la matriz como un parámetro vararg .Siempre verifique primero las bibliotecas estándar.
Entonces intenta:
o si su matriz contiene otras matrices como elementos:
fuente
String[] array = {"John", "Mahta", "Sara"}
y queremos esta salida sin corchetes y comasJohn Mahta Sara
:?String.join(" ", Arrays.asList(array))
. docSin embargo, es bueno saber que en cuanto a "siempre verifique primero las bibliotecas estándar", nunca me habría topado con el truco de
Arrays.toString( myarray )
- dado que me estaba concentrando en el tipo de myarray para ver cómo hacer esto. No quería tener que repetir el proceso: quería una llamada fácil para que saliera similar a lo que veo en el depurador de Eclipse y myarray.toString () simplemente no lo hacía.
fuente
String[] array = {"John", "Mahta", "Sara"}
y queremos esta salida sin corchetes y comasJohn Mahta Sara
:?En JDK1.8 puede usar operaciones agregadas y una expresión lambda:
fuente
Arrays.stream(strArray).forEach(System.out::println);
System.out::println
cuál es una referencia de método Java 8. Su código produce una lambda innecesaria.Arrays.asList
y hagaArrays.stream(strArray).forEach(System.out::println)
Stream.of
sería hacerlo.skip(n).limit(m)
. La implementación actual no devuelve un flujo TAMAÑO mientras que loArrays.stream(T[], int, int)
hace, lo que conduce a mejores rendimientos divididos si desea realizar operaciones en paralelo. Además, si tiene unint[]
, puede usar accidentalmente elStream.of
que devolverá unStream<int[]>
con un solo elemento, mientras queArrays.stream
le dará unIntStream
directamente.Comenzando con Java 8, también se podría aprovechar el
join()
método proporcionado por la clase String para imprimir elementos de matriz, sin los corchetes, y separados por un delimitador de elección (que es el carácter de espacio para el ejemplo que se muestra a continuación):La salida será "¡Hola amigo!".
fuente
Si está utilizando Java 1.4, en su lugar puede hacer:
(Esto también funciona en 1.5+, por supuesto).
fuente
Arrays.toString
Como respuesta directa, la solución proporcionada por varios, incluido @Esko , utilizando los métodos
Arrays.toString
yArrays.deepToString
, es simplemente la mejor.Java 8: Stream.collect (unión ()), Stream.forEach
A continuación trato de enumerar algunos de los otros métodos sugeridos, intentando mejorar un poco, siendo la adición más notable el uso del
Stream.collect
operador, usando a , para imitar lo que está haciendo.joining
Collector
String.join
fuente
Antes de Java 8
Podríamos haber usado
Arrays.toString(array)
para imprimir una matriz unidimensional yArrays.deepToString(array)
para matrices multidimensionales.Java 8
Ahora tenemos la opción de
Stream
elambda
imprimir la matriz.Impresión de matriz unidimensional:
El resultado es:
Impresión de matriz multidimensional En caso de que queramos imprimir una matriz multidimensional, podemos utilizarla
Arrays.deepToString(array)
como:Ahora, el punto a observar es que el método
Arrays.stream(T[])
, que en caso de queint[]
nos devuelva,Stream<int[]>
y luego el método,flatMapToInt()
asigna cada elemento de la secuencia con el contenido de una secuencia asignada producida mediante la aplicación de la función de asignación proporcionada a cada elemento.El resultado es:
fuente
String[] array = {"John", "Mahta", "Sara"}
y queremos esta salida sin corchetes y comasJohn Mahta Sara
:?Arrays.deepToString(arr)
solo imprime en una línea.Para conseguir que una tabla se imprima como una tabla bidimensional, tuve que hacer esto:
Parece que el
Arrays.deepToString(arr)
método debería tomar una cadena de separación, pero desafortunadamente no lo hace.fuente
fuente
n
es el valor real de la matriz, no el índice. Para un ciclo for regular, también lo sería(someArray.length - 1) == i
, porque se rompe cuandoi
es igual a la longitud de la matriz.Diferentes formas de imprimir matrices en Java:
Manera simple
Utilizando
toString()
Matriz de impresión de matrices
Recurso: acceder a una matriz
fuente
En mi opinión, usar el ciclo regular for es la forma más sencilla de imprimir una matriz. Aquí tienes un código de muestra basado en tu intArray
Da salida como la suya 1, 2, 3, 4, 5
fuente
System.out.print(intArray[i]); if(i != intArray.length - 1) System.out.print(", ");
System.out.print(i + (i < intArray.length - 1 ? ", " : ""));
para combinar esas dos líneas.Me encontré con esta publicación en Vanilla #Java recientemente. No es muy conveniente escribir
Arrays.toString(arr);
, luego importarjava.util.Arrays;
todo el tiempo.Tenga en cuenta que esto no es una solución permanente de ninguna manera. Solo un truco que puede simplificar la depuración.
Imprimir una matriz directamente proporciona la representación interna y el hashCode. Ahora, todas las clases tienen
Object
como tipo padre. Entonces, ¿por qué no hackear elObject.toString()
? Sin modificación, la clase Object se ve así:¿Qué pasa si esto se cambia a:
Esta clase modificada simplemente se puede agregar a la ruta de clase agregando lo siguiente a la línea de comando:
-Xbootclasspath/p:target/classes
.Ahora, con la disponibilidad
deepToString(..)
desde Java 5,toString(..)
se puede cambiar fácilmente adeepToString(..)
para agregar soporte para matrices que contienen otras matrices.Encontré que este es un truco bastante útil y sería genial si Java simplemente pudiera agregar esto. Entiendo posibles problemas con tener matrices muy grandes ya que las representaciones de cadenas podrían ser problemáticas. Tal vez pasar algo como a
System.out
o aPrintWriter
para tales eventualidades.fuente
if
condiciones en cada objeto?Object
padre común? ¿Podemos trabajar esa idea más allá? No es que piense que modificar el comportamiento predeterminado de los objetos java.lang. * Es algo que recomendaría ...Siempre debería funcionar cualquier versión de JDK que use:
Funcionará si
Array
contiene Objetos. SiArray
contiene tipos primitivos, puede usar clases de contenedor en lugar de almacenar el primitivo directamente como ...Ejemplo:
Reemplácelo con:
Actualización:
Si ! Esto debe mencionarse que convertir una matriz en una matriz de objetos O para usar la matriz del Objeto es costoso y puede retrasar la ejecución. sucede por la naturaleza de java llamada autoboxing.
Por lo tanto, solo para fines de impresión, no debe usarse. podemos hacer una función que tome una matriz como parámetro e imprima el formato deseado como
fuente
toString(..)
, me derrota por qué alguien haría esto.En java 8 es fácil. hay dos palabras clave
Arrays.stream(intArray).forEach
referencia del método:
::println
Si desea imprimir todos los elementos en la matriz en la misma línea, simplemente use en
print
lugar deprintln
ieOtra forma sin referencia de método solo usa:
fuente
Hay una forma adicional si su matriz es de tipo char []:
huellas dactilares
fuente
Para agregar a todas las respuestas, imprimir el objeto como una cadena JSON también es una opción.
Usando Jackson:
Usando Gson:
fuente
Puede recorrer la matriz e imprimir cada elemento a medida que avanza. Por ejemplo:
Salida:
fuente
Hay siguientes maneras de imprimir matriz
fuente
Un atajo simplificado que he probado es este:
Imprimirá
No se requieren bucles en este enfoque y es mejor solo para matrices pequeñas
fuente
For-each loop también se puede usar para imprimir elementos de la matriz:
fuente
fuente
El uso de los métodos org.apache.commons.lang3.StringUtils.join (*) puede ser una opción.
Por ejemplo:
Usé la siguiente dependencia
fuente
Esto se marca como un duplicado para imprimir un byte [] . Nota: para una matriz de bytes hay métodos adicionales que pueden ser apropiados.
Puede imprimirlo como una cadena si contiene caracteres ISO-8859-1.
o si contiene una cadena UTF-8
o si quieres imprimirlo como hexadecimal.
o si quieres imprimirlo como base64.
o si desea imprimir una matriz de valores de bytes firmados
o si desea imprimir una matriz de valores de bytes sin signo
fuente
fuente
si está ejecutando jdk 8.
salida:
fuente
toString()
en la finalSystem.out.println()
y lo usaría enjoiner.add(element.toString())
lugar de agregar la cadena vacía. Esta solución también funciona para matrices de tipos no primitivos, de manera uniforme.element.toString()
interiorjoiner.add()
es solo para tipos no primitivos. Aún necesita usarInteger.toString(element)
construcciones similares para tipos primitivos. Personalmente, usé foreach loop enfor (int element : array) joiner.add(Integer.toString(element));
lugar de streams, pero eso es cuestión de gustos.En java 8:
fuente
Si usa la biblioteca Commons.Lang , podríamos hacer:
ArrayUtils.toString(array)
Salida:
fuente
// Si imprime la dirección del elemento de matriz en la consola en java.
fuente
Hay varias formas de imprimir elementos de una matriz. En primer lugar, explicaré eso, ¿qué es una matriz? ... La matriz es una estructura de datos simple para almacenar datos ... Cuando defina una matriz, asigne un conjunto de bloques de memoria auxiliar en RAM. Esos bloques de memoria se toman una unidad ..
Ok, crearé una matriz como esta,
Ahora mira la salida,
Puede ver una cadena desconocida impresa ... Como mencioné antes, se imprime la dirección de memoria cuya matriz (matriz de números) declarada. Si desea mostrar elementos en la matriz, puede usar "for loop", de esta manera ...
Ahora mira la salida,
Ok, imprimí correctamente elementos de una matriz de una dimensión ... Ahora voy a considerar una matriz de dos dimensiones ... Declararé una matriz de dos dimensiones como "número2" e imprimiré los elementos usando la palabra clave "Arrays.deepToString ()". Antes de usar eso Tendrá que importar la biblioteca 'java.util.Arrays'.
considerar la salida,
Al mismo tiempo, con dos bucles for, se pueden imprimir elementos 2D ... ¡Gracias!
fuente