Em Java, as matrizes não substituem toString()
, portanto, se você tentar imprimir uma diretamente, obtém o className
+ '@' + o hexadecimal da hashCode
matriz, conforme definido por Object.toString()
:
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
Mas geralmente, nós realmente queremos algo mais parecido [1, 2, 3, 4, 5]
. Qual é a maneira mais simples de fazer isso? Aqui estão alguns exemplos de entradas e saídas:
// 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()
hexadecimal. VejaObject#toString()
.Respostas:
Desde o Java 5, você pode usar
Arrays.toString(arr)
ouArrays.deepToString(arr)
para matrizes dentro de matrizes. Observe que aObject[]
versão chama.toString()
cada objeto na matriz. A saída é decorada da maneira exata que você está perguntando.Exemplos:
Matriz simples:
Resultado:
Matriz aninhada:
Resultado:
double
Matriz:Resultado:
int
Matriz:Resultado:
fonte
String[] array = {"John", "Mahta", "Sara"}
e queremos essa saída sem colchetes e vírgulasJohn Mahta Sara
:?Arrays.deepToString()
aceita apenas umaObject []
(ou uma matriz de classes que se estendemObject
, comoInteger
, por exemplo , para que não funcione em uma matriz primitiva de tipoint []
. MasArrays.toString(<int array>)
funciona bem para matrizes primitivas.System.out.println(String.join(" ", new String[]{"John", "Mahta", "Sara"}))
irá imprimirJohn Mahta Sara
.String.join(" ", "John", "Mahta", "Sara")
o.join(...)
método leva a matriz como um parâmetro vararg .Sempre verifique as bibliotecas padrão primeiro.
Então tente:
ou se sua matriz contiver outras matrizes como elementos:
fonte
String[] array = {"John", "Mahta", "Sara"}
e queremos essa saída sem colchetes e vírgulasJohn Mahta Sara
:?String.join(" ", Arrays.asList(array))
. docÉ bom saber, no entanto, que para "sempre verifique as bibliotecas padrão primeiro", eu nunca teria tropeçado no truque de
Arrays.toString( myarray )
- desde que eu estava me concentrando no tipo de matriz para ver como fazer isso. Eu não queria ter que repetir a coisa: eu queria uma ligação fácil para que ela saísse semelhante ao que vejo no depurador Eclipse e no myarray.toString () simplesmente não estava fazendo isso.
fonte
String[] array = {"John", "Mahta", "Sara"}
e queremos essa saída sem colchetes e vírgulasJohn Mahta Sara
:?No JDK1.8, você pode usar operações agregadas e uma expressão lambda:
fonte
Arrays.stream(strArray).forEach(System.out::println);
System.out::println
qual é uma referência do método Java 8. Seu código produz uma lambda desnecessária.Arrays.asList
e façaArrays.stream(strArray).forEach(System.out::println)
Stream.of
seria.skip(n).limit(m)
. A implementação atual não retorna um fluxo SIZED, retornandoArrays.stream(T[], int, int)
, resultando em melhores desempenhos de divisão, se você deseja executar operações em paralelo. Além disso, se você tiver umint[]
, poderá acidentalmente usar oStream.of
que retornará aStream<int[]>
com um único elemento, enquantoArrays.stream
o forneceráIntStream
diretamente.A partir do Java 8, também é possível aproveitar o
join()
método fornecido pela classe String para imprimir elementos da matriz, sem os colchetes, e separados por um delimitador de escolha (que é o caractere de espaço do exemplo mostrado abaixo):A saída será "Olá amigo!".
fonte
Se você estiver usando o Java 1.4, poderá:
(Isso funciona em 1.5+ também, é claro.)
fonte
Arrays.toString
Como uma resposta directa, a solução é fornecida por vários, incluindo @Esko , usando a
Arrays.toString
eArrays.deepToString
métodos , é simplesmente a melhor.Java 8 - Stream.collect (join ()), Stream.forEach
Abaixo, tento listar alguns dos outros métodos sugeridos, tentando melhorar um pouco, com a adição mais notável sendo o uso do
Stream.collect
operador, usando a , para imitar o que está fazendo.joining
Collector
String.join
fonte
Antes do Java 8
Poderíamos ter usado
Arrays.toString(array)
para imprimir uma matriz dimensional eArrays.deepToString(array)
para matrizes multidimensionais.Java 8
Agora temos a opção de
Stream
elambda
imprimir a matriz.Imprimindo uma matriz dimensional:
A saída é:
Impressão de matriz multidimensional Para o caso de querermos imprimir matriz multidimensional, podemos usar
Arrays.deepToString(array)
como:Agora, o ponto a ser observado é que o método
Arrays.stream(T[])
, que em caso deint[]
retornoStream<int[]>
e, em seguida, o métodoflatMapToInt()
mapeia cada elemento do fluxo com o conteúdo de um fluxo mapeado produzido aplicando a função de mapeamento fornecida a cada elemento.A saída é:
fonte
String[] array = {"John", "Mahta", "Sara"}
e queremos essa saída sem colchetes e vírgulasJohn Mahta Sara
:?Arrays.deepToString(arr)
só imprime em uma linha.Para realmente obter uma tabela para imprimir como uma tabela bidimensional, tive que fazer o seguinte:
Parece que o
Arrays.deepToString(arr)
método deve ter uma sequência separadora, mas infelizmente não.fonte
fonte
n
é o valor real da matriz, não o índice. Para um loop for regular, também seria(someArray.length - 1) == i
, porque quebra quandoi
é igual ao comprimento da matriz.Maneiras diferentes de imprimir matrizes em Java:
Maneira simples
Usando
toString()
Matriz de impressão de matrizes
Recurso: Acessar uma matriz
fonte
O uso regular de loop for é a maneira mais simples de imprimir array na minha opinião. Aqui você tem um código de amostra com base no seu intArray
Dá saída como sua 1, 2, 3, 4, 5
fonte
System.out.print(intArray[i]); if(i != intArray.length - 1) System.out.print(", ");
System.out.print(i + (i < intArray.length - 1 ? ", " : ""));
para combinar essas duas linhas.Me deparei com este post no Vanilla #Java recentemente. Não é muito conveniente escrever
Arrays.toString(arr);
e importarjava.util.Arrays;
o tempo todo.Observe que essa não é uma correção permanente, por qualquer meio. Apenas um truque que pode simplificar a depuração.
Imprimir uma matriz diretamente fornece a representação interna e o hashCode. Agora, todas as classes têm
Object
o tipo pai. Então, por que não hackear oObject.toString()
? Sem modificação, a classe Object fica assim:E se isso for alterado para:
Essa classe modificada pode ser simplesmente adicionada ao caminho da classe adicionando o seguinte à linha de comando:
-Xbootclasspath/p:target/classes
.Agora, com a disponibilidade do
deepToString(..)
Java 5, eletoString(..)
pode ser facilmente alterado paradeepToString(..)
para adicionar suporte a matrizes que contêm outras matrizes.Eu achei isso um hack bastante útil e seria ótimo se o Java pudesse simplesmente adicionar isso. Entendo possíveis problemas em ter matrizes muito grandes, pois as representações de cadeia de caracteres podem ser problemáticas. Talvez passe algo como um
System.out
ou umPrintWriter
para tais eventualidades.fonte
if
condições em todos os objetos?Object
pai comum? Podemos trabalhar essa idéia mais adiante? . Não que eu ache que modificar o comportamento padrão do java.lang * objetos é algo que eu encorajaria ...Sempre deve funcionar com a versão do JDK usada:
Funcionará se
Array
contiver objetos. Se oArray
contém tipos primitivos, você pode usar as classes wrapper, em vez disso, armazenando o primitivo diretamente como ..Exemplo:
Substitua por:
Atualização:
Sim ! deve-se mencionar que a conversão de uma matriz em uma matriz de objetos OU para usar a matriz do objeto é cara e pode retardar a execução. isso acontece pela natureza do java chamada autoboxing.
Portanto, apenas para fins de impressão, não deve ser usado. podemos criar uma função que usa uma matriz como parâmetro e imprime o formato desejado como
fonte
toString(..)
, me derrota por que alguém faria isso.No java 8 é fácil. existem duas palavras-chave
Arrays.stream(intArray).forEach
referência de método:
::println
Se você quiser imprimir todos os elementos do array na mesma linha, use apenas em
print
vez deprintln
ieOutra maneira sem referência ao método, basta usar:
fonte
Há uma maneira adicional se sua matriz for do tipo char []:
impressões
fonte
Para adicionar a todas as respostas, imprimir o objeto como uma string JSON também é uma opção.
Usando Jackson:
Usando o Gson:
fonte
Você pode fazer um loop pela matriz, imprimindo cada item, enquanto faz o loop. Por exemplo:
Resultado:
fonte
Existem as seguintes maneiras de imprimir a matriz
fonte
Um atalho simplificado que tentei é o seguinte:
Irá imprimir
Não são necessários loops nesta abordagem e é melhor apenas para pequenas matrizes
fonte
O loop for-each também pode ser usado para imprimir elementos da matriz:
fonte
fonte
O uso dos métodos org.apache.commons.lang3.StringUtils.join (*) pode ser uma opção
Por exemplo:
Eu usei a seguinte dependência
fonte
Está marcado como duplicado para imprimir um byte [] . Nota: para uma matriz de bytes, existem métodos adicionais que podem ser apropriados.
Você pode imprimi-lo como uma String se contiver caracteres ISO-8859-1.
ou se contiver uma string UTF-8
ou se você quiser imprimi-lo como hexadecimal.
ou se você quiser imprimi-lo como base64.
ou se você deseja imprimir uma matriz de valores de bytes assinados
ou se você deseja imprimir uma matriz de valores de bytes não assinados
fonte
fonte
se você estiver executando o jdk 8.
resultado:
fonte
toString()
na finalSystem.out.println()
e o usava emjoiner.add(element.toString())
vez de adicionar a string vazia. Essa solução também funciona para matrizes de tipos não primitivos, de maneira uniforme.element.toString()
interiorjoiner.add()
é apenas para tipos não primitivos. Você ainda precisa usarInteger.toString(element)
construções semelhantes a tipos primitivos. Pessoalmente, usei foreach loop emfor (int element : array) joiner.add(Integer.toString(element));
vez de streams, mas essa é a questão do gosto.No java 8:
fonte
Se estiver usando a biblioteca Commons.Lang , poderíamos fazer:
ArrayUtils.toString(array)
Resultado:
fonte
// Se você imprimir o endereço do elemento do array no console em java.
fonte
Existem várias maneiras de imprimir os elementos de uma matriz.Em primeiro lugar, explicarei isso, o que é uma matriz? ... Matriz é uma estrutura de dados simples para armazenar dados ... Quando você define uma matriz, aloca conjunto de blocos de memória auxiliar Esses blocos de memória são usados em uma unidade.
Ok, eu vou criar uma matriz como esta,
Agora olhe para a saída,
Você pode ver uma string desconhecida impressa. Como eu mencionei antes, o endereço de memória cuja matriz (array numérica) declarada é impressa. Se você deseja exibir elementos na matriz, pode usar "for loop", como este.
Agora olhe para a saída,
Ok, elementos impressos com êxito de uma matriz de dimensão. Agora, vou considerar uma matriz de duas dimensões. Vou declarar uma matriz de duas dimensões como "número2" e imprimir os elementos usando a palavra-chave "Arrays.deepToString ()". Antes de usar isso Você precisará importar a biblioteca 'java.util.Arrays'.
considere a saída,
Ao mesmo tempo, usando dois para loops, os elementos 2D podem ser impressos .. Obrigado!
fonte