В Java массивы не переопределяются toString()
, поэтому, если вы попытаетесь напечатать один непосредственно, вы получите className
+ '@' + шестнадцатеричный hashCode
массив массива, как определено Object.toString()
:
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
Но обычно нам бы хотелось чего-то большего [1, 2, 3, 4, 5]
. Какой самый простой способ сделать это? Вот несколько примеров входов и выходов:
// 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()
в шестнадцатеричном. СмObject#toString()
.Ответы:
Начиная с Java 5 вы можете использовать
Arrays.toString(arr)
илиArrays.deepToString(arr)
для массивов внутри массивов. Обратите внимание, чтоObject[]
версия вызывает.toString()
каждый объект в массиве. Вывод даже оформлен именно так, как вы просите.Примеры:
Простой массив:
Вывод:
Вложенный массив:
Вывод:
double
Массив:Вывод:
int
Массив:Вывод:
источник
String[] array = {"John", "Mahta", "Sara"}
, и мы хотим , чтобы этот выход без кронштейна и запятых:John Mahta Sara
?Arrays.deepToString()
допускается только расширениеObject []
(или массив классов, которые расширяютсяObject
, напримерInteger
, поэтому он не будет работать с примитивным массивом типаint []
. НоArrays.toString(<int array>)
отлично работает для примитивных массивов.System.out.println(String.join(" ", new String[]{"John", "Mahta", "Sara"}))
напечатаетJohn Mahta Sara
.String.join(" ", "John", "Mahta", "Sara")
для.join(...)
метод принимают массив в качестве vararg параметра.Всегда сначала проверяйте стандартные библиотеки.
Тогда попробуйте:
или если ваш массив содержит другие массивы в качестве элементов:
источник
String[] array = {"John", "Mahta", "Sara"}
, и мы хотим , чтобы этот выход без кронштейна и запятых:John Mahta Sara
?String.join(" ", Arrays.asList(array))
. ДокЭто приятно знать, однако, что «сначала всегда проверяйте стандартные библиотеки», я бы никогда не наткнулся на хитрость
Arrays.toString( myarray )
- так как я сосредоточился на типе myarray, чтобы увидеть, как это сделать. Я не хотел перебирать эту вещь: я хотел простой вызов, чтобы сделать его похожим на то, что я вижу в отладчике Eclipse, а myarray.toString () просто не делал этого.
источник
String[] array = {"John", "Mahta", "Sara"}
, и мы хотим , чтобы этот выход без кронштейна и запятых:John Mahta Sara
?В JDK1.8 вы можете использовать агрегатные операции и лямбда-выражение:
источник
Arrays.stream(strArray).forEach(System.out::println);
System.out::println
ссылка на метод Java 8. Ваш код выдает ненужную лямбду.Arrays.asList
и сделайтеArrays.stream(strArray).forEach(System.out::println)
Stream.of
буду делать.skip(n).limit(m)
. Текущая реализация не возвращает поток SIZED, в то время какArrays.stream(T[], int, int)
делает, что приводит к лучшему разделению производительности, если вы хотите выполнять операции параллельно. Также, если у вас естьint[]
, вы можете случайно использовать,Stream.of
который будет возвращатьStream<int[]>
с одним элементом, аArrays.stream
даст вамIntStream
напрямую.Начиная с Java 8, можно также использовать
join()
метод, предоставленный классом String, для распечатки элементов массива без скобок, разделенных выбранным разделителем (который является пробелом для примера, показанного ниже):Выход будет "Привет, амиго!"
источник
Если вы используете Java 1.4, вы можете вместо этого сделать:
(Это работает и в 1.5+, конечно.)
источник
Arrays.toString
Как прямой ответ, решение обеспечивает несколько, в том числе @Esko , используя
Arrays.toString
иArrays.deepToString
методы, просто лучший.Java 8 - Stream.collect (joining ()), Stream.forEach
Ниже я попытаюсь перечислить некоторые из других предложенных методов, пытаясь немного улучшить их, при этом наиболее заметным дополнением является использование
Stream.collect
оператора, использующего , для имитации того, что делает.joining
Collector
String.join
источник
До Java 8
Мы могли бы использовать
Arrays.toString(array)
для печати одномерный массив иArrays.deepToString(array)
для многомерных массивов.Java 8
Теперь у нас есть возможность
Stream
иlambda
распечатать массив.Печать одномерного массива:
Выход:
Печать многомерного массива На всякий случай, если мы хотим напечатать многомерный массив, мы можем использовать его
Arrays.deepToString(array)
как:Теперь нужно заметить, что метод
Arrays.stream(T[])
, который в случаеint[]
возвращает нас,Stream<int[]>
а затем методflatMapToInt()
отображает каждый элемент потока с содержимым отображенного потока, созданного путем применения предоставленной функции отображения к каждому элементу.Выход:
источник
String[] array = {"John", "Mahta", "Sara"}
, и мы хотим , чтобы этот выход без кронштейна и запятых:John Mahta Sara
?Arrays.deepToString(arr)
печатает только на одной строке.Чтобы получить таблицу для печати в виде двумерной таблицы, мне нужно было сделать это:
Кажется, что
Arrays.deepToString(arr)
метод должен принимать строку-разделитель, но, к сожалению, это не так.источник
источник
n
фактическое значение из массива, а не индекс. Для обычного цикла for это также произойдет(someArray.length - 1) == i
, потому что он прерывается, когдаi
равен длине массива.Различные способы печати массивов в Java:
Простой способ
С помощью
toString()
Печать массива массивов
Ресурс: доступ к массиву
источник
На мой взгляд, использование регулярного цикла for является самым простым способом печати массива. Здесь у вас есть пример кода на основе вашего intArray
Это дает вывод как ваши 1, 2, 3, 4, 5
источник
System.out.print(intArray[i]); if(i != intArray.length - 1) System.out.print(", ");
System.out.print(i + (i < intArray.length - 1 ? ", " : ""));
для объединения этих двух линий.Я недавно наткнулся на этот пост в Vanilla #Java . Это не очень удобно писать
Arrays.toString(arr);
, а затем импортироватьjava.util.Arrays;
все время.Пожалуйста, обратите внимание, что это не постоянное исправление в любом случае. Просто взлом, который может сделать отладку проще.
Печать массива напрямую дает внутреннее представление и хэш-код. Теперь все классы имеют
Object
родительский тип. Так почему бы не взломатьObject.toString()
? Без модификации класс Object выглядит так:Что если это изменить на:
Этот Modded класс может просто быть добавлены в путь класса, добавив следующее в командной строке:
-Xbootclasspath/p:target/classes
.Теперь,
deepToString(..)
начиная с версии Java 5, ееtoString(..)
можно легко изменить,deepToString(..)
чтобы добавить поддержку массивов, которые содержат другие массивы.Я нашел это довольно полезным хаком, и было бы здорово, если бы Java могла просто добавить это. Я понимаю потенциальные проблемы с очень большими массивами, так как строковые представления могут быть проблематичными. Может быть, передать что-то вроде
System.out
илиPrintWriter
для таких случаев.источник
if
условия на каждом объекте?Object
общего родителя? Можем ли мы развить эту идею дальше? Не то чтобы я думал, что изменение поведения объектов java.lang. * По умолчанию - это то, что я бы рекомендовал ...Он всегда должен работать независимо от того, какую версию JDK вы используете:
Это будет работать, если
Array
содержит объекты. Если онArray
содержит примитивные типы, вы можете использовать классы-оболочки вместо хранения примитива непосредственно как ..Пример:
Замените это:
Обновить :
Да ! Следует отметить, что преобразование массива в массив объектов или использование массива объектов является дорогостоящим и может замедлить выполнение. это происходит по природе Java называется автобоксом.
Так что только в целях печати, он не должен использоваться. мы можем сделать функцию, которая принимает массив в качестве параметра и печатает нужный формат как
источник
toString(..)
, это побеждает меня, почему кто-то когда-либо делал этоВ Java 8 это просто. есть два ключевых слова
Arrays.stream(intArray).forEach
ссылка на метод:
::println
Если вы хотите напечатать все элементы в массиве в одной строке, просто используйте
print
вместоprintln
ieДругой способ без ссылки на метод, просто используйте:
источник
Есть еще один способ, если ваш массив имеет тип char []:
печать
источник
Чтобы добавить ко всем ответам, можно также напечатать объект в виде строки JSON.
Используя Джексона:
Используя Gson:
источник
Вы можете циклически перемещаться по массиву, распечатывая каждый элемент по мере выполнения цикла. Например:
Вывод:
источник
Есть следующий способ печати массива
источник
Упрощенный ярлык, который я пробовал это:
Будет печатать
При таком подходе циклы не требуются, и он лучше всего подходит только для небольших массивов
источник
Цикл For-each также можно использовать для печати элементов массива:
источник
источник
Можно использовать методы org.apache.commons.lang3.StringUtils.join (*).
Например:
Я использовал следующую зависимость
источник
Это помечено как дубликат для печати байта [] . Примечание: для байтового массива есть дополнительные методы, которые могут быть подходящими.
Вы можете распечатать его как строку, если он содержит символы ISO-8859-1.
или если он содержит строку UTF-8
или если вы хотите распечатать его как шестнадцатеричный.
или если вы хотите распечатать его как base64.
или если вы хотите напечатать массив значений байтов со знаком
или если вы хотите распечатать массив значений без знака
источник
источник
если вы используете JDK 8.
вывод:
источник
toString()
в финалеSystem.out.println()
и использовал егоjoiner.add(element.toString())
вместо добавления пустой строки. Это решение работает и для массивов непримитивных типов, равномерно.element.toString()
внутри толькоjoiner.add()
для непримитивных типов. Вам все еще нужно использоватьInteger.toString(element)
подобные конструкции для примитивных типов. Лично я использовал цикл foreachfor (int element : array) joiner.add(Integer.toString(element));
вместо потоков, но это дело вкуса.В Ява 8:
источник
Если вы используете библиотеку Commons.Lang , мы можем сделать:
ArrayUtils.toString(array)
Вывод:
источник
// Если вы печатаете адрес элемента массива на консоли в Java.
источник
Есть несколько способов напечатать элементы массива. Прежде всего, я объясню, что такое массив? .. Массив - это простая структура данных для хранения данных. Когда вы определяете массив, выделяйте набор блоков вспомогательной памяти. в оперативной памяти. Эти блоки памяти берут одну единицу ..
Хорошо, я создам такой массив,
Теперь посмотрим на вывод,
Вы можете увидеть напечатанную неизвестную строку. Как я упоминал ранее, адрес памяти, чей массив (числовой массив) объявлен, напечатан. Если вы хотите отобразить элементы в массиве, вы можете использовать «для цикла», как это ..
Теперь посмотрим на вывод,
Хорошо, успешно напечатаны элементы одного размерного массива. Теперь я собираюсь рассмотреть двухмерный массив. Я объявлю двухмерный массив как «number2» и напечатаю элементы, используя ключевое слово «Arrays.deepToString ()». Перед этим Вам нужно будет импортировать библиотеку 'java.util.Arrays'.
рассмотреть выход,
В то же время, используя два цикла for, можно печатать 2D элементы .. Спасибо!
источник