Jaki jest najprostszy sposób wydrukowania tablicy Java?


1943

W Javie tablice nie zastępują toString(), więc jeśli spróbujesz wydrukować jedną bezpośrednio, otrzymasz className+ '@' + hex hashCodetablicy, zgodnie z definicją Object.toString():

int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray);     // prints something like '[I@3343c8b3'

Ale zwykle chcielibyśmy czegoś bardziej podobnego [1, 2, 3, 4, 5]. Jak najprościej to zrobić? Oto kilka przykładowych danych wejściowych i wyjściowych:

// 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]

8
Jaka ma być reprezentacja obiektów innych niż łańcuchy? Wynik wywołania toString? W cytatach czy nie?
— Jon Skeet

3
Tak, obiekty byłyby reprezentowane przez ich metodę toString () i bez cudzysłowów (właśnie edytowałem przykładowe dane wyjściowe).
— Alex Spurling

2
W praktyce ściśle związany z stackoverflow.com/questions/29140402/...
— Raedwald

1
To dziwne wyjście niekoniecznie jest miejscem w pamięci. Jest hashCode()w systemie szesnastkowym. Zobaczyć Object#toString().
— 4castle,

1
Aby wydrukować macierz jednowymiarową lub wielowymiarową w java8, sprawdź stackoverflow.com/questions/409784/...
— akhil_mittal

Odpowiedzi:


2600

Od wersji Java 5 można używać Arrays.toString(arr)lub Arrays.deepToString(arr)do tablic w obrębie tablic. Pamiętaj, że Object[]wersja wywołuje .toString()każdy obiekt w tablicy. Wyjście jest nawet udekorowane dokładnie tak, jak pytasz.

Przykłady:

  • Prosta tablica:

    String[] array = new String[] {"John", "Mary", "Bob"};
    System.out.println(Arrays.toString(array));
    

    Wynik:

    [John, Mary, Bob]
  • Zagnieżdżona tablica:

    String[][] deepArray = new String[][] {{"John", "Mary"}, {"Alice", "Bob"}};
    System.out.println(Arrays.toString(deepArray));
    //output: [[Ljava.lang.String;@106d69c, [Ljava.lang.String;@52e922]
    System.out.println(Arrays.deepToString(deepArray));
    

    Wynik:

    [[John, Mary], [Alice, Bob]]
  • double Szyk:

    double[] doubleArray = { 7.0, 9.0, 5.0, 1.0, 3.0 };
    System.out.println(Arrays.toString(doubleArray));
    

    Wynik:

    [7.0, 9.0, 5.0, 1.0, 3.0 ]
  • int Szyk:

    int[] intArray = { 7, 9, 5, 1, 3 };
    System.out.println(Arrays.toString(intArray));
    

    Wynik:

    [7, 9, 5, 1, 3 ]

3
Co jeśli mamy tablicę ciągów i chcemy mieć prosty wynik; takich jak: String[] array = {"John", "Mahta", "Sara"}i chcemy to wyjście bez wspornika i przecinkami: John Mahta Sara?
— Hengameh

3
@Hengameh: Istnieje kilka innych sposobów, ale moim ulubionym jest ten: javahotchocolate.com/notes/java.html#arrays-tostring .
— Russ Bateman

5
FYI, Arrays.deepToString()akceptuje tylko Object [](lub tablicę rozszerzających się klas Object, takich jak Integer, więc nie będzie działać na prymitywnej tablicy typu int []. Ale Arrays.toString(<int array>)działa dobrze dla prymitywnych tablic.
— Marcus

4
@Hengameh Jest na to metoda dedykowana. System.out.println(String.join(" ", new String[]{"John", "Mahta", "Sara"}))wydrukuje John Mahta Sara.
— user8397947,

2
@dorukayhan Właściwie można pominąć wyraźnie instancji tablicę tutaj: String.join(" ", "John", "Mahta", "Sara")dla .join(...)metoda przyjmuje tablicę jako vararg parametru.
— Amadán,

354

Zawsze najpierw sprawdź biblioteki standardowe.

import java.util.Arrays;

Więc spróbuj:

System.out.println(Arrays.toString(array));

lub jeśli twoja tablica zawiera inne tablice jako elementy:

System.out.println(Arrays.deepToString(array));

Co jeśli mamy tablicę ciągów i chcemy mieć prosty wynik; takich jak: String[] array = {"John", "Mahta", "Sara"}i chcemy to wyjście bez wspornika i przecinkami: John Mahta Sara?
— Hengameh

1
@Hengameh Po prostu zapisz Arrays.toString (tablica) w zmiennej typu string, a następnie usuń nawiasy klamrowe, zastępując metodę Java
— Naveed Ahmad

12
@Hengameh Obecnie z Java 8: String.join(" ", Arrays.asList(array)). doc
— Justin

106

Warto jednak wiedzieć, że „zawsze najpierw sprawdzaj biblioteki standardowe”. Nigdy nie natknąłem się na sztuczkę Arrays.toString( myarray )

- odkąd skoncentrowałem się na typie tablicy, aby zobaczyć, jak to zrobić. Nie chciałem wykonywać iteracji: chciałem łatwego wywołania, aby wyglądało podobnie do tego, co widzę w debuggerze Eclipse i myarray.toString () po prostu tego nie robił.

import java.util.Arrays;
.
.
.
System.out.println( Arrays.toString( myarray ) );

Co jeśli mamy tablicę ciągów i chcemy mieć prosty wynik; takich jak: String[] array = {"John", "Mahta", "Sara"}i chcemy to wyjście bez wspornika i przecinkami: John Mahta Sara?
— Hengameh

3
@Hengameh Myślę, że to inny temat. Możesz manipulować tym ciągiem za pomocą typowych operacji łańcuchowych później ... Jak Arrays.toString (myarray) .replace ("[", "("); i tak dalej.
— OddDev

91

W JDK1.8 możesz używać operacji agregujących i wyrażenia lambda:

String[] strArray = new String[] {"John", "Mary", "Bob"};

// #1
Arrays.asList(strArray).stream().forEach(s -> System.out.println(s));

// #2
Stream.of(strArray).forEach(System.out::println);

// #3
Arrays.stream(strArray).forEach(System.out::println);

/* output:
John
Mary
Bob
*/

50
Lub mniej kłopotliwe,Arrays.stream(strArray).forEach(System.out::println);
— Alexis C.

9
To jest niezdarne. Powinno to być System.out::printlnodniesienie do metody Java 8. Twój kod wytwarza niepotrzebną lambda.
— Boris the Spider

2
Po prostu pomiń Arrays.asListi zróbArrays.stream(strArray).forEach(System.out::println)
— Justin

1
@AlexisC. Ponieważ można go również używać z innymi obiektami niż tablice.
— Yassin Hajaj

1
@YassinHajaj Both. Na przykład, jeśli chcesz mieć strumień zakresu na tablicy, idiomatycznym sposobem Stream.ofbyłoby użycie .skip(n).limit(m). Bieżąca implementacja nie zwraca strumienia SIZED Arrays.stream(T[], int, int), co prowadzi do lepszego podziału wydajności, jeśli chcesz wykonywać operacje równolegle. Również jeśli masz int[], możesz przypadkowo użyć tego, Stream.ofco zwróci a Stream<int[]>z jednym elementem, a Arrays.streamda ci IntStreambezpośrednio.
— Alexis C.

41

Począwszy od Java 8, można również skorzystać z join()metody dostarczonej przez klasę String, aby wydrukować elementy tablicy bez nawiasów i oddzielić ogranicznikiem wyboru (który jest znakiem spacji dla przykładu pokazanego poniżej):

String[] greeting = {"Hey", "there", "amigo!"};
String delimiter = " ";
String.join(delimiter, greeting) 

Wyjście będzie brzmiało „Hej, amigo!”.


40

Jeśli używasz Java 1.4, możesz zamiast tego:

System.out.println(Arrays.asList(array));

(Oczywiście działa to również w wersji 1.5+).


38
Niestety działa to tylko z tablicami obiektów, a nie tablicami prymitywów.
— Alex Spurling

34

Arrays.toString

Jako bezpośrednia odpowiedź, rozwiązanie dostarczone przez kilka, w tym @Esko , przy użyciu metod Arrays.toStringi Arrays.deepToString, jest po prostu najlepsze.

Java 8 - Stream.collect (joining ()), Stream.forEach

Poniżej próbuję wymienić niektóre z innych sugerowanych metod, starając się nieco poprawić, przy czym najbardziej zauważalnym dodatkiem jest użycie Stream.collectoperatora, za pomocą , do naśladowania tego, co robi.joining CollectorString.join

int[] ints = new int[] {1, 2, 3, 4, 5};
System.out.println(IntStream.of(ints).mapToObj(Integer::toString).collect(Collectors.joining(", ")));
System.out.println(IntStream.of(ints).boxed().map(Object::toString).collect(Collectors.joining(", ")));
System.out.println(Arrays.toString(ints));

String[] strs = new String[] {"John", "Mary", "Bob"};
System.out.println(Stream.of(strs).collect(Collectors.joining(", ")));
System.out.println(String.join(", ", strs));
System.out.println(Arrays.toString(strs));

DayOfWeek [] days = { FRIDAY, MONDAY, TUESDAY };
System.out.println(Stream.of(days).map(Object::toString).collect(Collectors.joining(", ")));
System.out.println(Arrays.toString(days));

// These options are not the same as each item is printed on a new line:
IntStream.of(ints).forEach(System.out::println);
Stream.of(strs).forEach(System.out::println);
Stream.of(days).forEach(System.out::println);

33

Przed Javą 8

Mogliśmy użyć Arrays.toString(array)do drukowania tablicy jednowymiarowej i Arrays.deepToString(array)tablic wielowymiarowych.

Java 8

Teraz mamy opcję Streami lambdawydrukować tablicę.

Drukowanie macierzy jednowymiarowej:

public static void main(String[] args) {
    int[] intArray = new int[] {1, 2, 3, 4, 5};
    String[] strArray = new String[] {"John", "Mary", "Bob"};

    //Prior to Java 8
    System.out.println(Arrays.toString(intArray));
    System.out.println(Arrays.toString(strArray));

    // In Java 8 we have lambda expressions
    Arrays.stream(intArray).forEach(System.out::println);
    Arrays.stream(strArray).forEach(System.out::println);
}

Dane wyjściowe to:

[1, 2, 3, 4, 5]
[John, Mary, Bob]
1
2
3
4
5
John
Mary
Bob

Drukowanie macierzy wielowymiarowej Na wypadek, gdybyśmy chcieli wydrukować macierz wielowymiarową, możemy użyć Arrays.deepToString(array)jako:

public static void main(String[] args) {
    int[][] int2DArray = new int[][] { {11, 12}, { 21, 22}, {31, 32, 33} };
    String[][] str2DArray = new String[][]{ {"John", "Bravo"} , {"Mary", "Lee"}, {"Bob", "Johnson"} };

    //Prior to Java 8
    System.out.println(Arrays.deepToString(int2DArray));
    System.out.println(Arrays.deepToString(str2DArray));

    // In Java 8 we have lambda expressions
    Arrays.stream(int2DArray).flatMapToInt(x -> Arrays.stream(x)).forEach(System.out::println);
    Arrays.stream(str2DArray).flatMap(x -> Arrays.stream(x)).forEach(System.out::println);
} 

Teraz należy zauważyć, że metoda Arrays.stream(T[]), która w przypadku int[]zwrotów, Stream<int[]>a następnie metoda flatMapToInt()mapuje każdy element strumienia z zawartością zmapowanego strumienia wytworzonego przez zastosowanie dostarczonej funkcji mapowania do każdego elementu.

Dane wyjściowe to:

[[11, 12], [21, 22], [31, 32, 33]]
[[John, Bravo], [Mary, Lee], [Bob, Johnson]]
11
12
21
22
31
32
33
John
Bravo
Mary
Lee
Bob
Johnson


Co jeśli mamy tablicę ciągów i chcemy mieć prosty wynik; takich jak: String[] array = {"John", "Mahta", "Sara"}i chcemy to wyjście bez wspornika i przecinkami: John Mahta Sara?
— Hengameh

28

Arrays.deepToString(arr) drukuje tylko w jednej linii.

int[][] table = new int[2][2];

Aby faktycznie wydrukować tabelę jako tabelę dwuwymiarową, musiałem to zrobić:

System.out.println(Arrays.deepToString(table).replaceAll("],", "]," + System.getProperty("line.separator")));

Wygląda na to, że Arrays.deepToString(arr)metoda powinna pobrać ciąg separatora, ale niestety tak nie jest.


3
Może użyj System.getProperty („line.separator”); zamiast \ r \ n, więc jest odpowiedni również dla systemów innych niż Windows.
— Skuter

możesz teraz użyć System.lineSeparator ()
— Novaterata,

20
for(int n: someArray) {
    System.out.println(n+" ");
}

6
W ten sposób otrzymujesz puste miejsce;)
— Matthias

1
@ matthiad .. ta linia pozwoli uniknąć pustej przestrzeni System.out.println (n + (someArray.length == n)? "": "");
— Muhammad Suleman

3
Najgorszy sposób na zrobienie tego.
— NameNotFoundException

@MuhammadSuleman To nie działa, ponieważ jest to pętla dla każdego. nto rzeczywista wartość z tablicy, a nie indeks. W przypadku zwykłej pętli for również byłoby (someArray.length - 1) == i, ponieważ pęka, gdy ijest równa długości tablicy.
— Radiodef,

17

Różne sposoby drukowania tablic w Javie:

  1. Prosta droga

    List<String> list = new ArrayList<String>();
    list.add("One");
    list.add("Two");
    list.add("Three");
    list.add("Four");
    // Print the list in console
    System.out.println(list);

Wyjście: [jeden, dwa, trzy, cztery]

  1. Za pomocą toString()

    String[] array = new String[] { "One", "Two", "Three", "Four" };
    System.out.println(Arrays.toString(array));

Wyjście: [jeden, dwa, trzy, cztery]

  1. Drukowanie tablic tablic

    String[] arr1 = new String[] { "Fifth", "Sixth" };
    String[] arr2 = new String[] { "Seventh", "Eight" };
    String[][] arrayOfArray = new String[][] { arr1, arr2 };
    System.out.println(arrayOfArray);
    System.out.println(Arrays.toString(arrayOfArray));
    System.out.println(Arrays.deepToString(arrayOfArray));

Dane wyjściowe: [[Ljava.lang.String; @ 1ad086a [[Ljava.lang.String; @ 10385c1, [Ljava.lang.String; @ 42719c] [[Fifth, Sixth], [Seventh, Eighth]]

Zasób: Uzyskaj dostęp do tablicy


13

Moim zdaniem użycie regularnej pętli for jest najprostszym sposobem drukowania tablicy. Tutaj masz przykładowy kod oparty na twojej tablicy intArray

for (int i = 0; i < intArray.length; i++) {
   System.out.print(intArray[i] + ", ");
}

Daje wynik jako twój 1, 2, 3, 4, 5


4
Drukuje „1, 2, 3, 4, 5” jako dane wyjściowe, drukuje także przecinek po ostatnim elemencie.
— icza

Jakie rozwiązanie ma brak przecinka po ostatnim elemencie?
— Mona Jalal

3
Możesz zamienić kod w pętli naSystem.out.print(intArray[i]); if(i != intArray.length - 1) System.out.print(", ");
— Nepoxx

2
Możesz także użyć System.out.print(i + (i < intArray.length - 1 ? ", " : ""));do połączenia tych dwóch linii.
— Nick Suwyn

Możesz użyć StringBuilder i skrócić przecinek końcowy. int [] intArray = new int [] {1, 2, 3, 4, 5}; final StringBuilder sb = new StringBuilder (); for (int i: intArray) {sb.append (intArray [i]). append (","); } if (sb.length ()> 0) {sb.setLength (sb.length () - 1); } System.out.println (sb.toString ()); Daje to wynik „1, 2, 3, 4, 5”.
— Rick Ryker,

8

Ostatnio natknąłem się na ten post w Vanilla #Java . Nie jest to zbyt wygodne pisanie Arrays.toString(arr);, a następnie java.util.Arrays;cały czas importowanie .

Uwaga: w żadnym wypadku nie jest to stała poprawka. Tylko hack, który może ułatwić debugowanie.

Drukowanie tablicy bezpośrednio daje wewnętrzną reprezentację i hashCode. Teraz wszystkie klasy mają Objecttyp nadrzędny. Dlaczego więc nie zhakować Object.toString()? Bez modyfikacji klasa Object wygląda następująco:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Co jeśli zmieni się to na:

public String toString() {
    if (this instanceof boolean[])
        return Arrays.toString((boolean[]) this);
    if (this instanceof byte[])
        return Arrays.toString((byte[]) this);
    if (this instanceof short[])
        return Arrays.toString((short[]) this);
    if (this instanceof char[])
        return Arrays.toString((char[]) this);
    if (this instanceof int[])
        return Arrays.toString((int[]) this);
    if (this instanceof long[])
        return Arrays.toString((long[]) this);
    if (this instanceof float[])
        return Arrays.toString((float[]) this);
    if (this instanceof double[])
        return Arrays.toString((double[]) this);
    if (this instanceof Object[])
        return Arrays.deepToString((Object[]) this);
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Ten Modded klasa może być po prostu dodane do ścieżki klasy poprzez dodanie następujących do wiersza poleceń: -Xbootclasspath/p:target/classes.

Teraz, dzięki dostępności deepToString(..)od wersji Java 5, toString(..)można łatwo zmienić, deepToString(..)aby dodać obsługę tablic zawierających inne tablice.

Uważam, że jest to dość przydatny hack i byłoby wspaniale, gdyby Java mogła to po prostu dodać. Rozumiem potencjalne problemy z posiadaniem bardzo dużych tablic, ponieważ reprezentacje ciągów mogą być problematyczne. Może podać coś takiego jak a System.outlub PrintWriterna takie ewentualności.


2
chcesz wykonać te ifwarunki na każdym obiekcie?
— sidgate,

+1 tylko za pomysł, ale w oparciu o poprzedni komentarz, czy możemy modyfikować implementacje tablic bezpośrednio, a nie zależnie od Objectwspólnego elementu nadrzędnego? Czy możemy dalej rozwinąć ten pomysł? Nie dlatego, że myślę, że modyfikowanie domyślnego zachowania obiektów java.lang. * Zachęciłbym ...
— YoYo

8

Powinno zawsze działać niezależnie od używanej wersji JDK:

System.out.println(Arrays.asList(array));

Będzie działać, jeśli Arrayzawiera obiekty. Jeśli Arrayzawiera typy prymitywne, możesz użyć klas opakowujących zamiast tego przechowywać prymityw bezpośrednio jako ...

Przykład:

int[] a = new int[]{1,2,3,4,5};

Zamień na:

Integer[] a = new Integer[]{1,2,3,4,5};

Aktualizacja :

Tak ! należy wspomnieć, że konwersja tablicy na tablicę obiektów LUB w celu użycia tablicy obiektów jest kosztowna i może spowolnić wykonywanie. dzieje się tak z powodu natury java zwanej autoboxing.

Więc tylko do celów drukowania, nie należy go używać. możemy stworzyć funkcję, która przyjmuje tablicę jako parametr i wypisuje żądany format jako

public void printArray(int [] a){
        //write printing code
} 

1
Przekształcanie tablicy w listę tylko do celów drukowania nie wydaje się być bardzo pomysłową decyzją; a biorąc pod uwagę, że ta sama klasa ma toString(..), pokonuje mnie, dlaczego ktoś miałby to zrobić.
— Debosmit Ray

8

W java 8 jest to łatwe. są dwa słowa kluczowe

  1. strumień: Arrays.stream(intArray).forEach
  2. odwołanie do metody: ::println

    int[] intArray = new int[] {1, 2, 3, 4, 5};
    Arrays.stream(intArray).forEach(System.out::println);

Jeśli chcesz wydrukować wszystkie elementy w tablicy w tej samej linii, po prostu użyj printzamiast printlnnp

int[] intArray = new int[] {1, 2, 3, 4, 5};
Arrays.stream(intArray).forEach(System.out::print);

Innym sposobem bez odwołania do metody jest użycie:

int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(intArray));

1
Spowoduje to wydrukowanie każdego elementu tablicy w osobnym wierszu, aby nie spełniał wymagań.
— Alex Spurling,

jeśli chcesz wydrukować wszystkie elementy w tablicy w tym samym wierszu, po prostu użyj print zamiast println tj. int [] intArray = new int [] {1, 2, 3, 4, 5}; Arrays.stream (intArray) .forEach (System.out :: print); w przeciwnym kierunku bez odniesienia do metody użyj int [] intArray = new int [] {1, 2, 3, 4, 5}; System.out.println (Arrays.toString (intArray));
— suatCoskun

6

Istnieje jeden dodatkowy sposób, jeśli tablica jest typu char []:

char A[] = {'a', 'b', 'c'}; 

System.out.println(A); // no other arguments

odciski

abc

5

Aby dodać do wszystkich odpowiedzi, można również wydrukować obiekt jako ciąg JSON.

Za pomocą Jacksona:

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
System.out.println(ow.writeValueAsString(anyArray));

Korzystanie z Gson:

Gson gson = new Gson();
System.out.println(gson.toJson(anyArray));

To jest to, co robie. Dzięki temu możesz drukować dowolnie złożone struktury, o ile są one kodowane w JSON. Zawsze używam „ładnego”. Czy twój drugi przykład to robi? Sądzę, że musisz zaznaczyć opcję „ładną”, aby ją zdobyć.
— Steve

5

Możesz zapętlać tablicę, drukując każdy element, gdy zapętlasz. Na przykład:

String[] items = {"item 1", "item 2", "item 3"};

for(int i = 0; i < items.length; i++) {

    System.out.println(items[i]);

}

Wynik:

item 1
item 2
item 3

5

Istnieje sposób na wydrukowanie macierzy

 // 1) toString()  
    int[] arrayInt = new int[] {10, 20, 30, 40, 50};  
    System.out.println(Arrays.toString(arrayInt));

// 2 for loop()
    for (int number : arrayInt) {
        System.out.println(number);
    }

// 3 for each()
    for(int x: arrayInt){
         System.out.println(x);
     }

4

Uproszczony skrót, który wypróbowałem, to:

    int x[] = {1,2,3};
    String printableText = Arrays.toString(x).replaceAll("[\\[\\]]", "").replaceAll(", ", "\n");
    System.out.println(printableText);

Wydrukuje się

1
2
3

W tym podejściu nie są wymagane żadne pętle i najlepiej jest je stosować tylko w przypadku małych tablic


4

Pętla For-each może również służyć do drukowania elementów tablicy:

int array[] = {1, 2, 3, 4, 5};
for (int i:array)
    System.out.println(i);

@firephil System.out.println (a [i]); jest używany ze zwykłą pętlą for, gdzie tworzony jest indeks „i” i wypisywana jest wartość przy każdym indeksie. Użyłem pętli „dla każdej”. Spróbuj, mam nadzieję, że dostaniesz mój punkt.
— hasham.98,

Tak, jest to najkrótszy sposób na wydrukowanie tablicy
— Manjitha teshara,

3
public class printer {

    public static void main(String[] args) {
        String a[] = new String[4];
        Scanner sc = new Scanner(System.in);
        System.out.println("enter the data");
        for (int i = 0; i < 4; i++) {
            a[i] = sc.nextLine();
        }
        System.out.println("the entered data is");
        for (String i : a) {
            System.out.println(i);
        }
      }
    }

3

Opcją może być użycie metod org.apache.commons.lang3.StringUtils.join (*)
Na przykład:

String[] strArray = new String[] { "John", "Mary", "Bob" };
String arrayAsCSV = StringUtils.join(strArray, " , ");
System.out.printf("[%s]", arrayAsCSV);
//output: [John , Mary , Bob]

Użyłem następującej zależności

<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>

Dodanie zależności z powodu czegoś trywialnego, co można zrobić w dwóch liniach kodu, to krzyczący antypattern.
— jurez

commons-lang3 jest bardzo topolową zależnością i zauważ, że ta odpowiedź brzmiała, gdy większość ludzi nie używała java 8
— Haim Raman

2

Jest to oznaczone jako duplikat do wydrukowania bajtu [] . Uwaga: w przypadku tablicy bajtów istnieją dodatkowe metody, które mogą być odpowiednie.

Możesz wydrukować go jako ciąg znaków, jeśli zawiera znaki ISO-8859-1.

String s = new String(bytes, StandardChars.ISO_8559);
System.out.println(s);
// to reverse
byte[] bytes2 = s.getBytes(StandardChars.ISO_8559);

lub jeśli zawiera ciąg UTF-8

String s = new String(bytes, StandardChars.UTF_8);
System.out.println(s);
// to reverse
byte[] bytes2 = s.getBytes(StandardChars.UTF_8);

lub jeśli chcesz wydrukować go w systemie szesnastkowym.

String s = DatatypeConverter.printHexBinary(bytes);
System.out.println(s);
// to reverse
byte[] bytes2 = DatatypeConverter.parseHexBinary(s);

lub jeśli chcesz wydrukować jako base64.

String s = DatatypeConverter.printBase64Binary(bytes);
System.out.println(s);
// to reverse
byte[] bytes2 = DatatypeConverter.parseBase64Binary(s);

lub jeśli chcesz wydrukować tablicę podpisanych wartości bajtów

String s = Arrays.toString(bytes);
System.out.println(s);
// to reverse
String[] split = s.substring(1, s.length() - 1).split(", ");
byte[] bytes2 = new byte[split.length];
for (int i = 0; i < bytes2.length; i++)
    bytes2[i] = Byte.parseByte(split[i]);

lub jeśli chcesz wydrukować tablicę wartości bajtów bez znaku

String s = Arrays.toString(
               IntStream.range(0, bytes.length).map(i -> bytes[i] & 0xFF).toArray());
System.out.println(s);
// to reverse
String[] split = s.substring(1, s.length() - 1).split(", ");
byte[] bytes2 = new byte[split.length];
for (int i = 0; i < bytes2.length; i++)
    bytes2[i] = (byte) Integer.parseInt(split[i]); // might need a range check.

1
// array of primitives:
int[] intArray = new int[] {1, 2, 3, 4, 5};

System.out.println(Arrays.toString(intArray));

output: [1, 2, 3, 4, 5]

// array of object references:
String[] strArray = new String[] {"John", "Mary", "Bob"};

System.out.println(Arrays.toString(strArray));

output: [John, Mary, Bob]

1

jeśli używasz jdk 8.

public static void print(int[] array) {
    StringJoiner joiner = new StringJoiner(",", "[", "]");
    Arrays.stream(array).forEach(element -> joiner.add(element + ""));
    System.out.println(joiner.toString());
}


int[] array = new int[]{7, 3, 5, 1, 3};
print(array);

wynik:

[7,3,5,1,3]

Jest to lepsze niż zaakceptowana odpowiedź, ponieważ daje większą kontrolę nad ogranicznikiem, prefiksem i sufiksem. Jednak usunęłbym zbędne toString()w finale System.out.println()i użyłem go joiner.add(element.toString())zamiast dodawać pusty ciąg. To rozwiązanie działa również w przypadku tablic typów innych niż pierwotne, jednakowo.
— John McClane,

Moje złe, w element.toString()środku joiner.add()jest tylko dla typów nieprymitywnych. Nadal musisz używać Integer.toString(element)podobnych do konstrukcji prymitywnych typów. Osobiście użyłem pętli foreach for (int element : array) joiner.add(Integer.toString(element));zamiast strumieni, ale to kwestia gustu.
— John McClane,

0

W java 8:

Arrays.stream(myArray).forEach(System.out::println);

0

Jeśli korzystamy z biblioteki Commons.Lang , moglibyśmy:

ArrayUtils.toString(array)

int[] intArray = new int[] {1, 2, 3, 4, 5};
String[] strArray = new String[] {"John", "Mary", "Bob"};
ArrayUtils.toString(intArray);
ArrayUtils.toString(strArray);

Wynik:

{1,2,3,4,5}
{John,Mary,Bob}

0

// Jeśli wydrukujesz adres elementu tablicy na konsoli w Javie.

      int myArrayElement[] = {1,2,3,4,5,6,7,8,9,10};
       Log.i("MyTag",myIntegerNumbers + "");

To nie wydaje się odpowiadać na pytanie.
— użytkownik

-1

Istnieje kilka sposobów drukowania elementów tablicy. Po pierwsze, wyjaśnię, co to jest tablica? .. Tablica to prosta struktura danych do przechowywania danych. Kiedy definiujesz tablicę, Przydziel zestaw pomocniczych bloków pamięci w pamięci RAM. Te bloki pamięci są pobierane po jednej jednostce.

Ok, utworzę taką tablicę,

class demo{
      public static void main(String a[]){

           int[] number={1,2,3,4,5};

           System.out.print(number);
      }
}

Teraz spójrz na wynik,

wprowadź opis zdjęcia tutaj

Możesz zobaczyć wydrukowany nieznany ciąg .. Jak już wspomniałem, drukowany jest adres pamięci, którego zadeklarowana tablica (tablica liczb). Jeśli chcesz wyświetlać elementy w tablicy, możesz użyć „for loop”, jak to ..

class demo{
      public static void main(String a[]){

           int[] number={1,2,3,4,5};

           int i;

           for(i=0;i<number.length;i++){
                 System.out.print(number[i]+"  ");
           }
      }
}

Teraz spójrz na wynik,

wprowadź opis zdjęcia tutaj

Ok, pomyślnie wydrukowałem elementy jednej tablicy wymiarów .. Teraz zamierzam rozważyć tablicę dwóch wymiarów .. Zadeklaruję tablicę dwóch wymiarów jako „numer2” i wydrukuję elementy za pomocą słowa kluczowego „Arrays.deepToString ()”. Będziesz musiał zaimportować bibliotekę „java.util.Arrays”.

 import java.util.Arrays;

 class demo{
      public static void main(String a[]){

           int[][] number2={{1,2},{3,4},{5,6}};`

           System.out.print(Arrays.deepToString(number2));
      }
}

rozważ wynik,

wprowadź opis zdjęcia tutaj

W tym samym czasie, korzystając z dwóch pętli, można wydrukować elementy 2D .. Dziękuję!


int array [] = {1, 2, 3, 4, 5}; dla (int i: array) System.out.println (i);
— Manjitha teshara

spróbuj tego, myślę, że to najkrótszy sposób na wydrukowanie tablicy
— Manjitha teshara

„wypisywany jest adres pamięci, którego zadeklarowana tablica (tablica liczb)” To wcale nie jest prawda, jego systemowy kod skrótu obiektu, i może być oparty na wielu rzeczach, w tym adresie pamięci, ale to może się zmienić później, a kod skrótu nie zmiana. A obecnie jest to najczęściej liczba losowa. gotofinal.dev/java/2017/10/08/java-default-hashcode.html
— GotoFinal
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.