Дополнительно
Какой самый простой способ распечатать массив в Java?
В 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]
1838
20
Начиная с Java 5 вы можете использовать
Arrays.toString(arr)
илиArrays.deepToString(arr)
для массивов внутри массивов. Обратите внимание, что версияObject[]
вызывает.toString()
для каждого объекта в массиве. Вывод даже оформлен именно так, как вы просите.Примеры:
Простой массив:
Вывод:
Вложенный массив:
Вывод:
double
Массив:Вывод:
int
Массив:Вывод:
Всегда сначала проверяйте стандартные библиотеки. Попробуйте:
или если ваш массив содержит другие массивы в качестве элементов:
Это приятно знать, однако, что касается "всегда сначала проверяйте стандартные библиотеки", я бы никогда не наткнулся на трюк
Arrays.toString( myarray )
.-поскольку я концентрировался на типе myarray, чтобы понять, как это сделать. Я не хотел выполнять итерации: мне нужен был простой вызов, который бы позволил получить результат, подобный тому, что я вижу в отладчике Eclipse, а myarray.toString() просто не делал этого.
В JDK1.8 вы можете использовать агрегатные функции и лямбда-выражения:
Если вы используете Java 1.4, вы можете сделать это вместо нее:
(Конечно, это работает и в версии 1.5+).
Начиная с Java 8, можно также воспользоваться присоединиться()` метод класс String, чтобы распечатать элементы массива, без скобок, и разделяя их выбор (который является пробелом в примере, приведенном ниже):
Выход будет "Привет Амиго!&и".
Массивы.метод toString
В качестве прямого ответа, решение, предоставляемые несколькими, в том числе @Eskoиспользуя
Arrays.toString
и Arrays.deepToString
методы, просто лучший.В Java 8 - Трансляцию.собирать(соединять()), трансляция.еогеасп
Ниже я попробую перечислить некоторые из других методов, предложенных, пытаясь хоть немного улучшить, с наиболее заметным дополнением является использование
Stream.collect
оператор, помощьюjoining
коллекционер
, чтобы имитировать то, что в эту строку.присоединяйтесь делает.До Java 8
Мы могли бы использовать `массивы.метод toString(массив) для печати одномерного массива и массивов.deepToString(массив) для многомерных массивов.
В Java 8
Теперь у нас есть возможность "поток" и "лямбда", чтобы распечатать массив.
Печати одномерного массива:
Вывод:
Печать многомерного массива Только в случае, если мы хотим напечатать многомерного массива можно использовать массивы.deepToString(массив)` как:
Теперь наблюдение заключается в том, что массивы метод
.трансляция(Т []), которые в случае типа
int[]возвращает нас трансляция И Л;int [] и GT;
, а затемметод flatMapToInt()
сопоставляет каждому элементу потока с содержанием сетевого потока, произведенного, применяя при условии сопоставления функции к каждому элементу.Вывод:
`Массивы.deepToString только принты(Арр) на одной линии.
На самом деле сделать таблицу для печати как двумерная таблица, я должен был сделать это:
Похоже, что
массивы.deepToString(Арр)
метод должен принимать строку, разделитель, но, к сожалению, это не'т.Различные способы печати массивы в Java:
Список<строка> Список = новый ArrayList и Л;строка> В(); список.добавить("Один и"); список.добавить("от двух" - а); список.добавить("на три"); список.добавить("от четырех" - а); // Печать списка в консоли Системы.из.код println(список);
метод toString()
Массив string [] = новая строка[] { "Один и", "от двух" В, С "Три", "от четырех" и }; Системы.из.код println(массивов.метод toString(массив));
Строка[] arr1 = новая строка [] {с "пятой" В, С "шестой" и }; Строка[] arr2 = новая строка [] {с "Седьмой" В, С "восьмеркой" и }; Строка[][] arrayOfArray = новая строка[][] { arr1, arr2 }; Системы.из.метод println(arrayOfArray); Системы.из.код println(массивов.метод toString(arrayOfArray)); Системы.из.код println(массивов.deepToString(arrayOfArray));
Ресурс: Доступ К Массиву
С помощью регулярных по петля-это самый простой способ печати массива на мой взгляд. Здесь у вас есть пример кода, на основе вашего класса intarray
Это дает выход как ваша 1, 2, 3, 4, 5
В Java 8 это легко. есть два ключевых слова
массивы.поток(intarray с).команда foreach
::код println
тип int[] intarray с = новый инт[] {1, 2, 3, 4, 5}; Массивы.поток(intarray с).(по каждому элементу системы.из::код println);
Если вы хотите напечатать все элементы массива в одну строку, а затем просто использовать
печать
вместозапросы
, т. е.Другой способ без эталонный метод просто использовать:
Она всегда должна работать в зависимости от версии JDK версии, которую вы используете:
Это будет работать, если массив содержит объекты. Если
массив
содержит примитивных типов, вы можете использовать классы-оболочки вместо сохранения примитивных, прямо как..Пример:
Замените его:
Обновление :
Да ! это следует отметить, что преобразование массива в массив объектов или использования объекта'ы время является дорогостоящим и может замедлить выполнение. это происходит по природе Ява называется автобоксинг.
Так только для цели печатания, его не следует использовать. мы можем сделать функцию, которая принимает массив в качестве параметра и выводит нужный формат
Я наткнулся на этот пост в Ваниль #Ява в последнее время. Это's не очень удобно писать массивы.метод toString(Арр);
, затем импортировать
Ява.утиль.Массивов;` все время.Пожалуйста, обратите внимание, это не постоянное исправление с помощью любых средств. Просто хак, который может сделать отладку проще.
Печать массива напрямую дает внутреннее представление и хэш-код. Сейчас все классы имеют "объект" в качестве родительского типа. Так почему бы не взломать объекта.метод toString()`? Без изменений, объект класса выглядит так:
Что при этом изменяется:
Этот класс модом может просто быть добавлен к пути к классу, добавив следующую строку в командной строке:
-Xbootclasspath/п:направления/классы
.Теперь, с наличием deepToString(..)
начиная с Java 5, в
метод toString (..) может быть легко изменен наdeepToString(..)
чтобы добавить поддержку массивы, содержащие другие массивы.Я нашел, что это очень полезный Хак, и было бы здорово, если Java может просто добавить это. Я понимаю, что потенциальных проблем с имея очень большие массивы со строковыми представлениями может быть проблематичным. Может быть, передать что-то типа
системы.из ОР
издания` к подобным неожиданностям.Там's один дополнительный способ, если Ваш массив имеет тип char[]:
печать
Вы могли бы перебрать массив, печать каждого элемента, как цикл. Например:
Выход:
Чтобы добавить в ответы на все вопросы, печать объекта в строку JSON тоже вариант.
Используя Джексон:
Используя Дсын:
Существует следующий способ выбора печати
Для каждой петли также может быть использован для печатать элементы массива: