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.