[java] Java 배열을 인쇄하는 가장 간단한 방법은 무엇입니까?

Java에서는 배열이 재정의되지 않으므로 toString()직접 인쇄하려고하면 다음 과 같이 정의 된대로 배열 className의 16 진수 + ‘@’+ 를 얻습니다 .hashCodeObject.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]



답변

Java 5부터 Arrays.toString(arr)또는 Arrays.deepToString(arr)배열 내의 배열을 사용할 수 있습니다 . 참고 것을 Object[]버전 호출 .toString()배열의 각 객체. 원하는 방식으로 결과물이 꾸며져 있습니다.

예 :

  • 간단한 배열 :

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

    산출:

    [John, Mary, Bob]
  • 중첩 배열 :

    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));

    산출:

    [[John, Mary], [Alice, Bob]]
  • double 정렬:

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

    산출:

    [7.0, 9.0, 5.0, 1.0, 3.0 ]
  • int 정렬:

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

    산출:

    [7, 9, 5, 1, 3 ]

답변

항상 표준 라이브러리를 먼저 확인하십시오.

import java.util.Arrays;

그런 다음 시도하십시오.

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

또는 배열에 다른 배열이 요소로 포함 된 경우 :

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


답변

그러나 “항상 표준 라이브러리를 먼저 확인하십시오”에 대해서는 알아두면 좋을 것입니다. Arrays.toString( myarray )

-이 작업을 수행하는 방법을보기 위해 myarray 유형에 집중하고 있기 때문에. 이 일을 반복하고 싶지는 않았습니다 .Eclipse 디버거에서 볼 수있는 것과 비슷하게하기 위해 쉬운 호출을 원했고 myarray.toString () 은하 지 않았습니다.

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


답변

JDK1.8에서는 집계 연산과 람다 식을 사용할 수 있습니다.

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


답변

Java 8부터는 괄호없이 배열 요소를 인쇄하기 join()위해 String 클래스 가 제공 하는 메소드를 활용할 수 있으며 선택 구분 기호 (아래에 표시된 예의 공백 문자)로 구분됩니다.

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

결과는 “Hey there amigo!”입니다.


답변

Java 1.4를 사용하는 경우 대신 다음을 수행 할 수 있습니다.

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

(물론 1.5 이상에서도 작동합니다.)


답변

Arrays.toString

직접 답변으로 @Esko를 포함 하여 Arrays.toStringand Arrays.deepToString메소드를 사용하여 여러 가지가 제공하는 솔루션 이 가장 좋습니다.

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

아래에는 제안 된 다른 방법 중 일부를 나열하려고합니다. 가장 주목할만한 추가 기능은 Stream.collect연산자를 사용 하고을 사용하여 수행중인 작업 을 모방하는 것 입니다.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);