Меню

Java как вывести массив без скобок

Как убрать скобки [] из ArrayList # toString ()?

Я создал список массивов на Java, который выглядит примерно так:

Когда я печатаю ошибки, я получаю их как

Теперь я хочу удалить квадратные скобки ([]) из этого списка массивов. Я думал, что могу использовать метод errors.remove («[«), но потом обнаружил, что это просто логическое значение и отображает истину или ложь. Может ли кто-нибудь подсказать, как я могу этого добиться?

Спасибо заранее за вашу помощь.

11 ответов

Вероятно, вы звоните System.out.println, чтобы распечатать список. В JavaDoc говорится:

Скобки добавлены реализацией ArrayList toString . Чтобы удалить их, вы должны сначала получить String:

А затем снимите скобки примерно так:

Не рекомендуется полагаться на реализацию toString() . toString() предназначен только для создания удобочитаемого представления для ведения журнала или отладки. Так что лучше построить String самостоятельно во время итерации:

Обратите внимание, что это не массив, а просто строка, отображающая содержимое списка. Чтобы создать массив из списка, вы можете использовать list.toArray ():

Можно так писать.

String output = errors.toString().replaceAll(«(^\\[|\\]$)», «»);

Это ArrayList из Integer . Этот ArrayList не может содержать такой символ, как ‘[‘ . Но вы можете удалить из него Integer вот так —

System.out.println(error.toString().substring(1, error.toString().length()-1)); Это сработало для меня

Скобки не являются частью вашего списка массивов, поскольку, как вы уже упоминали, он набирается целым числом

Когда вы печатаете ошибки, используя

Он просто форматирует ваши данные, просто перебирайте массив и распечатывайте каждое значение отдельно

Если вы распечатаете список ошибок, он вызовет изнутри метод toString() вашего списка, и этот метод добавит скобки. Есть несколько возможностей. Вы можете получить String с помощью метода toString() и удалить скобки из String. Или вы пишете свой собственный метод для печати списка.

В вашем списке нет скобок. Именно так Java по умолчанию печатает список.

Если вы хотите распечатать содержимое вашего списка, вы можете что-то вроде этого

На самом деле скобок нет в списке, это просто представление списка. Если какой-либо объект переходит в вывод String, вызывается метод объекта toString (). В случае ArrayList этот метод доставляет содержимое списка, заключенного в эти скобки.

Если вы хотите распечатать свой ArrayList без скобок, просто переберите его и распечатайте.

Скобки, которые вы видите, — это всего лишь автоматический способ отображения списка в JAVA (например, при использовании System.out.println(list); .

Если вы не хотите, чтобы они отображались при отображении, вы можете создать собственный метод:

Затем настройте этот код, чтобы отображать его по своему вкусу!

Краткий ответ: System.out.println(errors.toString().substring(1, errors.toString().length() — 1))

Объяснение: когда вы вызываете System.out.println(obj) с Object в качестве параметра, напечатанный текст будет результатом obj.toString() . ArrayList.toString() реализован таким образом, что он представляет свое содержимое в квадратных скобках [] в конкатенации, разделенной запятыми, каждого из содержащихся элементов (также их представления .toString() ).

Не рекомендуется полагаться на реализацию toString() другого класса. Вы должны использовать свой собственный способ форматирования результата.

Источник

Как распечатать массив на Java

В этом уроке мы напечатаем массивы на Java, используя методы toString() и Deept-string (), потоки для циклов и итераторов, с примерами и объяснениями!

Автор: Mohamed Echout
Дата записи

Вступление

Печать массива – это быстрый способ дать нам представление о значениях содержимого внутри. Иногда значения массива являются желаемым результатом работы программы.

В этой статье мы рассмотрим как печатать массив на Java четырьмя различными способами.

Хотя “лучший способ” зависит от того, что должна делать ваша программа, мы начнем с самого простого метода печати, а затем покажем более подробные способы его выполнения.

  • Распечатайте массив с помощью Arrays.toString() и Arrays.deepToString()
  • Печать массива с использованием потоков Java 8
  • Печать массива путем преобразования в список
  • Выведите массив с помощью циклов For
  • Преобразование в список и Использование Итератора

Распечатайте массив с помощью Arrays.toString() и Arrays.deepToString()

Встроенный метод toString () -это чрезвычайно простой способ печати отформатированных версий объектов на Java.

Каждый тип данных в Java считается классом, и по умолчанию каждый класс наследуется от java.lang.Объект , корень иерархии классов Java. Вот почему у каждого класса есть метод toString () . Однако массивы не переопределяют метод toString() для удобного форматирования выходных данных, и он просто возвращает унаследованное значение, которое является хэшем объекта.

Читайте также:  Солитер червь как вывести

Мы печатаем массивы с помощью метода toString() из класса в java.util.Массивы .

Возьмем этот пример, где мы выводим значения массива целых чисел:

Приведенный выше код выведет следующее:

Обратите внимание, что все элементы разделены запятыми и заключены в квадратные скобки. Этот метод похож на визуальное представление массива.

Мы также можем использовать этот метод для печати массивов различных типов:

Это соответственно приводит к:

Метод toString() эффективен только для одномерных массивов. Когда у нас есть вложенные массивы, нам нужно использовать метод deepToString() :

Если вам нужно наглядное представление о том, что находится в вашем массиве с первого взгляда, методы toString() и deepToString () – ваш лучший вариант.

Однако эти методы не позволяют отформатировать вывод. Этот подход в основном является обходным путем для того факта, что массивы по умолчанию не переопределяют метод toString () .

Если вы предпочитаете некоторую гибкость в форматировании, вы можете рассмотреть возможность использования Java 8 потоков .

Печать массива с использованием потоков Java 8

Один из вариантов печати массива-преобразовать его в поток объектов, а затем распечатать каждый элемент в потоке. У нас есть несколько вариантов использования потоков для печати нашего массива.

Например, мы можем распечатать наш массив построчно следующим образом:

В этом случае мы используем метод static stream() класса Массивы для создания последовательного потока наших данных. Для каждого элемента в нашем потоке мы вызываем функцию println () , чтобы он отображался строка за строкой следующим образом:

Примечание: Мы ссылаемся на функцию println() следующим образом: System.out::println . :: в Java является оператором ссылки на метод. Функция forEach() может использовать либо лямбда – функцию , либо ссылку на метод .

В качестве альтернативы мы можем использовать класс Stream из java.util.stream.Stream для аналогичного вызова функции println() в потоке данных нашего массива. Мы можем построить поток этих данных, используя Stream.of() :

С помощью этого кода мы получим тот же результат:

Давайте попробуем это также с вложенными массивами, добавив даты выпуска начальных версий этих языков:

Вывод для каждой печати через потоки будет выглядеть примерно так:

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Это не очень хорошо работает… Мы снова вызываем println() для объектов массива. Нам придется снова транслировать эти объекты и печатать их элементы.

Для печати вложенных массивов мы можем использовать лямбда-выражение в функции forEach () , которое может перейти на второй уровень, создав еще один поток каждого уровня и распечатав записи таким образом:

Эта лямбда-функция выводит элементы в каждом вложенном массиве. При компиляции и выполнении мы получим этот результат:

Потоки облегчают работу с коллекциями. Но Java является гибкой, чтобы предоставить еще больше возможностей. Традиционный цикл for по-прежнему многое делает для нас. Давайте взглянем на печать массива с циклами.

Печать массива путем преобразования в список

Вы можете легко преобразовать массив Java в реализацию List . Существуют различные способы сделать это, и мы подробно рассмотрели каждый из них в нашем Как преобразовать массив Java в ArrayList статья.

Короче говоря, вызов toString () или просто распечатка (которая неявно вызывает toString() ) в Списке реализации, распечатает содержимое:

Кроме того, вы можете использовать .forEach() изначально в любой Коллекции , которой является Список . Так что вы можете просто пойти дальше и сделать то же самое:

Хотя это не очень хорошо отформатированный вариант:

Вы можете отказаться от ссылки на метод и просто использовать лямбду для большего контроля:

Выведите массив с помощью циклов For

Более известный подход к печати массива в Java заключается в использовании цикла для . С помощью цикла для мы получаем индекс элемента, и мы можем использовать индекс для получения элемента массива.

Мы настраиваем цикл для с переменной, обычно называемой i , в качестве счетчика, начинающегося с элемента 0 . Затем следует условие, которое сравнивает i с количеством элементов в массиве.

Примечание : Количество элементов в массиве, которые будут использоваться в состоянии цикла, никогда не должно быть жестко закодировано. Java предоставляет атрибут length , который позволяет программисту динамически вычислять количество элементов в массиве.

Читайте также:  Как начать чистить зубы щенку

И последнее, но не менее важное: наш цикл для принимает инкрементное значение, в нашем случае мы будем использовать обозначение i++ , чтобы продолжать увеличивать наш счетчик на один элемент в каждой итерации.

Как только наш цикл будет полностью настроен и готов, мы просто используем оператор System.out.println() для отображения каждого элемента в массиве, используя обозначение в прямоугольных скобках [i] , используя в качестве входных данных наш счетчик i .

Вот пример, в котором мы выводим все элементы целочисленного массива строка за строкой:

При выполнении этого кода в вашей консоли будет выведено следующее:

Использовать для циклов не так уж много. Они довольно гибкие и концептуально просты. Например, если у вас были вложенные массивы, то вы будете использовать вложенные для циклов.

Наконец, давайте взглянем на итераторы и списки.

Преобразование в список и Использование Итератора

Объект итератора Java позволяет нам отображать каждый элемент вашего массива без использования индексного подхода, который мы рассмотрели в разделе для цикла.

Чтобы использовать итераторы, мы должны изменить тип данных массива на Список . Мы можем сделать это с помощью метода Array.asList() и сохранить значения списка, возвращенные в новой переменной. Метод asList() принимает массив и превращает его в реализацию List .

Затем вам понадобится объект итератора для настройки итератора массива. Итератор подобен указателю, указывающему на каждый элемент массива. Итератор помогает вам проверять каждый элемент особым образом.

Для создания объекта итератора мы будем использовать метод iterator() нашего Списка . Как только наш объект итератора был создан, мы используем цикл while , поскольку он предлагает более компактный способ печати каждого элемента, возвращаемого итератором.

Условие цикла while будет содержать вызов метода hasNext() нашего итератора. Внутри цикла while мы печатаем каждый элемент, вызывая System.out.println() . Мы получаем элементы из итератора, вызывая метод next () . Цикл while будет повторяться над каждым элементом до тех пор, пока мы не пройдем наш массив (через Список ).

Вот пример, в котором мы берем массив целых чисел и выводим каждый элемент построчно с помощью итератора:

По сравнению с циклами for, этот метод предпочитают разработчики, которые предпочитают не иметь дело с индексами массивов. Вам гарантирован предстоящий элемент с next() . Итераторы являются мощными , потому что мы используем один и тот же поток для любого типа Списка , такого как ArrayList или Связанный список , а также для других коллекций, таких как Карта или Набор !

Вывод

В этой статье мы рассмотрели основные методы, используемые для печати массива в Java. Мы начали с использования встроенных методов Java toString() и deepToString() .

Оттуда мы использовали потоки, чтобы мы могли быстро печатать элементы массива строка за строкой. Мы также рассмотрели, как преобразовать массив в список, который вы можете либо просто вызвать, либо использовать API Java 8 Stream для более детального управления.

Затем мы использовали традиционную структуру для цикла для печати каждого элемента по отдельности.

И последнее, но не менее важное: мы использовали объект итератора для печати каждого элемента отдельно, используя метод next() внутри цикла while . Подходы, описанные в этой главе, могут быть использованы в зависимости от варианта использования и проблемы, которую вы пытаетесь решить.

Источник

Каков самый простой способ печати массива Java?

в Java массивы не переопределяют toString() , поэтому, если вы попытаетесь распечатать его напрямую, вы получите className + @ + hex hashCode массива, как определено Object.toString() :

но обычно мы на самом деле хотим чего-то большего, как [1, 2, 3, 4, 5] . Как это проще всего сделать? Вот несколько примеров входов и выходов:

30 ответов

начиная с 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, можно воспользоваться join() метод строковый класс чтобы распечатать элементы массива, без скобок и разделенные разделителем выбора (который является символом пробела для примера, показанного ниже):

выход будет » Эй, там amigo!».

Arrays.deepToString(arr) только печатает на одной строке.

чтобы на самом деле получить таблицу для печати в виде двумерной таблицы, я должен был сделать это:

кажется Arrays.deepToString(arr) метод должен принимать строку, разделитель, но, к сожалению, это не так.

массивы.метод toString

Java 8-Stream.соберите (joining ()), поток.по каждому элементу

ниже я пытаюсь перечислить некоторые из других предложенных методов, пытаясь немного улучшить, при этом наиболее заметным дополнением является использование Stream.collect оператор, используя а joining Collector , чтобы имитировать то, что String.join делает.

до Java 8, мы могли бы использовать Arrays.toString(array) для печати одномерного массива и Arrays.deepToString(array) для многомерных массивов. У нас есть возможность Stream и lambda в Java 8, который также может использоваться для печати массива.

печать одномерного массива:

печать многомерного массива На всякий случай, если мы хотим напечатать многомерный массив, мы можем использовать Arrays.deepToString(array) as:

теперь нужно отметить, что метод Arrays.stream(T[]) , что в случае int[] возвращает нас Stream и затем методом flatMapToInt() сопоставляет каждый элемент потока с содержимым сопоставленного потока, полученного путем применения предоставленной функции сопоставления к каждому элемент.

[[11, 12], [21, 22], [31, 32, 33]]
[[Джон, Браво], [Мэри, Ли], [Боб, Джонсон]]
11
12
21
22
31
32
33
Джон!—21—> Браво!—21—> Мэри!—21—> Ли!—21—> Боб!—21—> Джонсон!—12—>

различные способы печати массивов в Java:

используя toString()

печать массива массивов

Выход: [[Ljava.ленг.String;@1ad086a [[Ljava.ленг.Строка;@10385c1, [Ljava.ленг.String;@42719c] [[пятый, шестой], [седьмой, восьмой]]

через обычный на loop-самый простой способ печати массива, на мой взгляд. Здесь у вас есть пример кода на основе вашего intArray

Он дает выход как ваш 1, 2, 3, 4, 5

я наткнулся на этот пост в Ваниль #Java недавно. Это не очень удобно писать!—2—>, затем импортировать java.util.Arrays; все время.

обратите внимание, что это не постоянное исправление любыми средствами. Просто хак, который может сделать отладку проще.

печать массива непосредственно дает внутреннее представление и хэш-код. Теперь все классы Object как родительский тип. Так почему бы не взломать Object.toString() ? Без модификация, класс Object выглядит следующим образом:

что делать, если это изменено на:

этот модифицированный класс можно просто добавить в путь к классу, добавив в командную строку следующее: -Xbootclasspath/p:target/classes .

теперь, при наличии deepToString(..) начиная с Java 5, toString(..) можно легко изменить на deepToString(..) чтобы добавить поддержку массивов, содержащих другие массивы.

я нашел, что это довольно полезный Хак, и это было бы здорово если бы Java мог просто добавить это. Я понимаю потенциальные проблемы с наличием очень больших массивов, так как строковые представления могут быть проблематичными. Может пройти что-то вроде System.out или PrintWriter для таких случайностей.

он всегда должен работать в зависимости от версии JDK, которую вы используете:

это будет работать, если Array содержит объекты. Если Array содержит примитивные типы, вы можете использовать классы-оболочки вместо хранения примитива непосредственно как..

обновление :

да ! следует отметить, что преобразование массива в массив объектов или использование массива объекта дорого и может замедлить исполнение. это происходит по природе Ява называется автобоксинг.

так только для цели печатания, оно не должен быть использован. мы можем сделать функцию, которая принимает массив в качестве параметра и выводит нужный формат как

в java 8 это легко. есть два ключевых слова

ссылка на метод: ::println

если вы хотите распечатать все элементы массива в одной строке, просто используйте print вместо println то есть

другой способ без ссылки на метод просто использовать:

есть еще один способ, если Ваш массив имеет тип char[]:

Источник