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


1944

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]

8
문자열 이외의 객체에 대한 표현을 원하십니까? toString을 호출 한 결과? 따옴표로 또는 아닙니다?
Jon Skeet

3
예 개체는 toString () 메서드로 표시되고 따옴표없이 표시됩니다 (예제 출력 예제 편집).
Alex Spurling


1
그 이상한 출력이 반드시 메모리 위치는 아닙니다. 그것은의 hashCode()진수. 참조하십시오 Object#toString().
4castle

1
java8에서 1 차원 또는 다차원 배열을 인쇄하려면 stackoverflow.com/questions/409784/…를
akhil_mittal 1

답변:


2600

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 ]

3
만약 우리가 문자열 배열을 가지고 있고 간단한 출력을 원한다면? like : String[] array = {"John", "Mahta", "Sara"}이며 괄호와 쉼표없이이 출력을 원합니다. John Mahta Sara?
Hengameh

3
@ Hengameh :이 작업을 수행하는 다른 방법이 몇 가지 있지만 가장 좋아하는 방법은 javahotchocolate.com/notes/java.html#arrays-tostring 입니다.
Russ Bateman

5
참고로, Arrays.deepToString()만 받아 Object []확장하는 클래스의 (또는 배열 Object등을 Integer, 그것을하지 않습니다 형태의 원시적 배열에서 작업을 그렇게 int []하지만. Arrays.toString(<int array>)원시적 배열을 위해 잘 작동합니다.
마커스

4
@Hengameh 전용 메소드가 있습니다. System.out.println(String.join(" ", new String[]{"John", "Mahta", "Sara"}))인쇄 John Mahta Sara합니다.
user8397947

2
@dorukayhan 사실 여기 배열의 인스턴스를 명시 적으로 생략 할 수 있습니다 : String.join(" ", "John", "Mahta", "Sara")위한 .join(...)방법은 같은 배열한다 가변 인자의 매개 변수를.
Amadán

354

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

import java.util.Arrays;

그런 다음 시도하십시오.

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

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

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

만약 우리가 문자열 배열을 가지고 있고 간단한 출력을 원한다면? like : String[] array = {"John", "Mahta", "Sara"}이며 괄호와 쉼표없이이 출력을 원합니다. John Mahta Sara?
Hengameh

1
@Hengameh Arrays.toString (array)를 문자열 변수에 저장 한 다음 Java 메소드를 대체하여 중괄호를 제거하십시오
Naveed Ahmad

12
@Hengameh 요즘 Java 8과 함께 : String.join(" ", Arrays.asList(array)). 문서
Justin

106

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

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

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

만약 우리가 문자열 배열을 가지고 있고 간단한 출력을 원한다면? like : String[] array = {"John", "Mahta", "Sara"}이며 괄호와 쉼표없이이 출력을 원합니다. John Mahta Sara?
Hengameh

3
@ 헨 가메 나는 그것이 또 다른 주제라고 생각합니다. 나중에 일반적인 문자열 연산으로이 문자열을 조작 할 수 있습니다 ... Like Arrays.toString (myarray) .replace ( "[", "("); 등)
OddDev

91

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

50
덜 성가신Arrays.stream(strArray).forEach(System.out::println);
Alexis C.

9
이 서투른입니다. System.out::printlnJava 8 메소드 참조 여야합니다 . 코드가 불필요한 람다를 생성합니다.
거미 보리스

2
단지를 생략 Arrays.asList하고 할Arrays.stream(strArray).forEach(System.out::println)
저스틴

1
@AlexisC. 배열 이외의 다른 객체와 함께 사용할 수도 있기 때문입니다.
Yassin Hajaj

1
@YassinHajaj 둘 다. 예를 들어 배열을 통해 범위 스트림을 원한다면 관용적 인 방법을 사용하는 Stream.of.skip(n).limit(m)입니다. 현재 구현은 SIZED 스트림을 반환하지 않지만 Arrays.stream(T[], int, int)병렬로 작업을 수행하려는 경우 분할 성능이 향상됩니다. 당신이있는 경우 또한 int[], 당신은 실수로 사용할 수 있습니다 Stream.of를 반환하는 Stream<int[]>반면, 단일 요소로 Arrays.stream당신을 줄 것이다 IntStream직접.
Alexis C.

41

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

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

결과는 "Hey there amigo!"입니다.


40

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

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

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


38
불행히도 이것은 프리미티브 배열이 아닌 객체 배열에서만 작동합니다.
Alex Spurling

34

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

33

Java 8 이전

Arrays.toString(array)1 차원 배열과 다차원 배열을 인쇄 하는 데 사용할 수있었습니다 Arrays.deepToString(array).

자바 8

이제 우리는 옵션을 가지고 있습니다 Streamlambda배열을 인쇄 할 수 있습니다.

1 차원 배열 인쇄 :

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

출력은 다음과 같습니다.

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

다차원 배열 인쇄 다차원 배열 을 인쇄하려는 경우 다음 Arrays.deepToString(array)과 같이 사용할 수 있습니다 .

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

이제 관찰 할 점은 그 방법 Arrays.stream(T[])의 경우, int[]반환 우리 Stream<int[]>다음 방법은 flatMapToInt()각 요소에 제공 매핑 기능을 적용하여 생산 매핑 된 스트림의 내용 스트림의 각 요소를 매핑합니다.

출력은 다음과 같습니다.

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


존슨


만약 우리가 문자열 배열을 가지고 있고 간단한 출력을 원한다면? like : String[] array = {"John", "Mahta", "Sara"}이며 괄호와 쉼표없이이 출력을 원합니다. John Mahta Sara?
Hengameh

28

Arrays.deepToString(arr) 한 줄에 인쇄합니다.

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

실제로 테이블을 2 차원 테이블로 인쇄하려면이 작업을 수행해야했습니다.

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

Arrays.deepToString(arr)메서드가 구분 기호 문자열을 가져야하는 것처럼 보이지만 불행히도 그렇지 않습니다.


3
아마도 System.getProperty ( "line.separator"); \ r \ n 대신 Windows 이외의 경우에도 적합합니다.
스쿠터

이제 System.lineSeparator ()를 사용할 수 있습니다
Novaterata

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

6
이렇게하면 빈 공간이
Matthias

1
@ matthiad ..이 줄은 빈 공간으로 끝나는 것을 피합니다. System.out.println (n + (someArray.length == n)? "": "");
Muhammad Suleman 2016 년

3
가장 나쁜 방법입니다.
NameNotFoundException

@MuhammadSuleman 이것은 for-each 루프이기 때문에 작동하지 않습니다. n인덱스가 아닌 배열의 실제 값입니다. 일반 for 루프의 경우 배열 길이와 같을 (someArray.length - 1) == i때 깨지기 때문에 이기도합니다 i.
Radiodef

17

Java로 배열을 인쇄하는 다른 방법 :

  1. 간단한 방법

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

출력 : [하나, 둘, 셋, 넷]

  1. 사용 toString()

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

출력 : [하나, 둘, 셋, 넷]

  1. 배열 배열 인쇄

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

출력 : [[Ljava.lang.String; @ 1ad086a [[Ljava.lang.String; @ 10385c1, [Ljava.lang.String; @ 42719c] [[Fifth, Sixth], [Seventh, 8]]]

리소스 : 배열에 액세스


13

정기적 인 for 루프를 사용하는 것이 배열을 인쇄하는 가장 간단한 방법입니다. 여기에 intArray를 기반으로 한 샘플 코드가 있습니다.

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

1, 2, 3, 4, 5로 출력합니다.


4
"1, 2, 3, 4, 5,"를 출력으로 인쇄하고 마지막 요소 다음에 쉼표를 인쇄합니다.
icza

마지막 요소 뒤에 쉼표가없는 해결책은 무엇입니까?
Mona Jalal

3
루프 내의 코드를 다음과 같이 바꿀 수 있습니다 :System.out.print(intArray[i]); if(i != intArray.length - 1) System.out.print(", ");
Nepoxx

2
System.out.print(i + (i < intArray.length - 1 ? ", " : ""));이 두 줄을 결합하는 데 사용할 수도 있습니다 .
Nick Suwyn

StringBuilder를 사용하고 후행 쉼표를자를 수 있습니다. int [] intArray = 새로운 int [] {1, 2, 3, 4, 5}; 최종 StringBuilder sb = 새로운 StringBuilder (); for (int i : intArray) {sb.append (intArray [i]). append ( ","); } if (sb.length ()> 0) {sb.setLength (sb.length ()-1); } System.out.println (sb.toString ()); "1, 2, 3, 4, 5"가 출력됩니다.
Rick Ryker

8

최근 에 Vanilla #Java 에서이 게시물을 보았습니다 . 쓰기가 그리 편리하지 않고 항상 Arrays.toString(arr);가져 java.util.Arrays;옵니다.

이 방법은 영구적 인 수정이 아닙니다. 디버깅을 더 간단하게 만들 수있는 해킹 일뿐입니다.

배열을 직접 인쇄하면 내부 표현과 해시 코드가 제공됩니다. 이제 모든 클래스는 Object부모 유형입니다. 그렇다면 왜 해킹하지 Object.toString()않습니까? 수정하지 않으면 Object 클래스는 다음과 같습니다.

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

이것이 다음으로 변경되면 어떻게됩니까?

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

이 수정 된 클래스는 명령 행에 다음을 추가하여 클래스 경로에 추가 할 수 -Xbootclasspath/p:target/classes있습니다.

이제 deepToString(..)Java 5부터는 다른 배열을 포함하는 배열을 지원 toString(..)하도록 쉽게 변경할 수 있습니다 deepToString(..).

나는 이것이 매우 유용한 해킹임을 발견했으며 Java가 단순히 이것을 추가 할 수 있다면 좋을 것입니다. 문자열 표현이 문제가 될 수 있으므로 매우 큰 배열을 갖는 잠재적 문제를 이해합니다. 그러한 사건에 대해 a System.out또는 a 와 같은 것을 전달할 수도 PrintWriter있습니다.


2
if모든 객체에서 이러한 조건 을 실행하고 싶 습니까?
sidgate

아이디어에 대해서만 +1하지만 이전 의견을 기반으로 Object공통 부모 에 의존하지 않고 직접 배열 구현을 수정할 수 있습니까? 우리는 그 아이디어를 더 발전시킬 수 있습니까? java.lang. * 객체의 기본 동작을 수정하는 것이 내가 권장 할만한 것이라고 생각하지는 않습니다.
YoYo

8

어떤 JDK 버전을 사용하든 항상 작동해야합니다.

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

Array포함 된 객체가 있으면 작동합니다 . Array기본 유형 이 포함 된 경우, 기본 유형을 직접 저장하는 대신 랩퍼 클래스를 사용할 수 있습니다.

예:

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

다음으로 교체하십시오.

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

업데이트 :

예 ! 이것은 배열을 객체 배열로 변환하거나 객체 배열을 사용하기 위해 비용이 많이 들고 실행 속도가 느려질 수 있습니다. 그것은 autoboxing이라는 자바의 특성에 의해 발생합니다.

따라서 인쇄 목적으로 만 사용해서는 안됩니다. 배열을 매개 변수로 사용하고 원하는 형식을 다음과 같이 인쇄하는 함수를 만들 수 있습니다.

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

1
인쇄 목적으로 만 어레이를 목록으로 변환하는 것은 매우 유익한 결정처럼 보이지 않습니다. 같은 클래스에가 있다고 가정하면 toString(..)왜 누군가가 이것을 할 수 있는지를 물리칩니다.
Debosmit Ray

8

Java 8에서는 쉽습니다. 두 개의 키워드가 있습니다

  1. 흐름: Arrays.stream(intArray).forEach
  2. 방법 참조 : ::println

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

배열의 모든 요소를 ​​같은 줄에 인쇄하려면 print대신 printlnie를 사용하십시오.

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

메소드 참조가없는 다른 방법은 다음을 사용하십시오.

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

1
그러면 배열의 각 요소가 별도의 줄에 인쇄되어 요구 사항을 충족하지 못합니다.
Alex Spurling

배열의 모든 요소를 ​​같은 줄에 인쇄하려면 println 대신 print를 사용하십시오. int [] intArray = new int [] {1, 2, 3, 4, 5}; Arrays.stream (intArray) .forEach (System.out :: print); 메소드 참조가없는 다른 방법은 int []를 사용하십시오. intArray = new int [] {1, 2, 3, 4, 5}; System.out.println (Arrays.toString (intArray));
suatCoskun

6

배열이 char [] 유형 인 경우 한 가지 추가 방법이 있습니다.

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

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

인쇄물

abc

5

모든 답변에 추가하려면 객체를 JSON 문자열로 인쇄하는 것도 옵션입니다.

Jackson 사용하기 :

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

Gson 사용하기 :

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

이것이 제가하는 것입니다. 이를 통해 JSON에 인코딩 할 수있는 임의의 복잡한 구조를 인쇄 할 수 있습니다. 나는 항상 "예쁜"을 사용해야합니다. 두 번째 예가 그렇게합니까? 나는 그것을 얻기 위해 "예쁜"옵션을 간지럽 힐 필요가 있다고 생각합니다.
Steve

5

반복하면서 배열을 반복하여 각 항목을 인쇄 할 수 있습니다. 예를 들면 다음과 같습니다.

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

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

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

}

산출:

item 1
item 2
item 3

5

배열을 인쇄하는 방법은 다음과 같습니다.

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

내가 시도한 간단한 단축키는 다음과 같습니다.

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

인쇄합니다

1
2
3

이 방법에는 루프가 필요하지 않으며 작은 배열에만 적합합니다.


4

For-each 루프를 사용하여 배열의 요소를 인쇄 할 수도 있습니다.

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

@firephil System.out.println (a [i]); 색인 "i"가 작성되고 모든 색인의 값이 인쇄되는 일반 for 루프와 함께 사용됩니다. "for each"루프를 사용했습니다. 시도해보십시오, 당신이 내 요점을 얻을 수 있기를 바랍니다.
hasham.98

그렇습니다, 이것은 배열을 인쇄하는 가장 짧은 방법입니다
Manjitha teshara 16:04의

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

org.apache.commons.lang3.StringUtils.join (*) 메소드 사용은 옵션이 될 수 있습니다.
예를 들면 다음과 같습니다.

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

나는 다음과 같은 의존성을 사용했다

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

두 줄의 코드에서 수행되는 사소한 일로 인해 종속성을 추가하는 것은 비명을 지르는 반 패턴입니다.
jurez

commons-lang3은 매우 포플러 의존성이며,이 답변은 대부분의 사람들이 Java 8을 사용하지 않았다는 점에 주목하십시오.
Haim Raman

2

이것은 byte [] 인쇄 를 위해 중복으로 표시됩니다 . 참고 : 바이트 배열의 경우 적절한 추가 방법이 있습니다.

ISO-8859-1 문자가 포함되어 있으면 문자열로 인쇄 할 수 있습니다.

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

또는 UTF-8 문자열을 포함하는 경우

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

또는 16 진수로 인쇄하려는 경우.

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

또는 base64로 인쇄하려는 경우.

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

또는 부호있는 바이트 값의 배열을 인쇄하려는 경우

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

또는 부호없는 바이트 값의 배열을 인쇄하려는 경우

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

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

산출:

[7,3,5,1,3]

구분 기호, 접두사 및 접미사를보다 강력하게 제어 할 수 있다는 점에서 허용되는 대답보다 낫습니다. 그러나 toString()최종에서 불필요한 것을 제거 하고 빈 문자열을 추가하는 대신 System.out.println()사용했습니다 joiner.add(element.toString()). 이 솔루션은 기본이 아닌 유형의 어레이에도 균일하게 작동합니다.
John McClane

내 나쁜, element.toString()내부 joiner.add()는 기본이 아닌 유형에만 해당됩니다. Integer.toString(element)프리미티브 유형의 유사 구조를 계속 사용해야합니다 . 개인적 for (int element : array) joiner.add(Integer.toString(element));으로 스트림 대신 foreach 루프 를 사용 했지만 맛의 문제입니다.
John McClane

0

자바 8에서 :

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

0

Commons.Lang 라이브러리를 사용하는 경우 다음을 수행 할 수 있습니다.

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

산출:

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

0

// 콘솔에서 배열 요소의 주소를 java로 인쇄하는 경우.

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

이것은 질문에 대답하지 않는 것 같습니다.
사용자

-1

배열 요소를 인쇄하는 방법에는 여러 가지가 있습니다. 먼저 배열이란 무엇입니까?. 어레이는 데이터를 저장하는 간단한 데이터 구조입니다. 어레이를 정의 할 때 보조 메모리 블록 세트를 할당하십시오 메모리 블록은 하나의 단위로 사용됩니다.

좋아, 나는 이런 배열을 만들 것이다.

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

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

           System.out.print(number);
      }
}

이제 출력을보십시오.

여기에 이미지 설명을 입력하십시오

알 수없는 문자열이 인쇄 된 것을 볼 수 있습니다. 앞에서 언급했듯이 array (number array)가 선언 된 메모리 주소가 인쇄됩니다. 배열에 요소를 표시하려면 "for loop"를 사용할 수 있습니다.

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]+"  ");
           }
      }
}

이제 출력을보십시오.

여기에 이미지 설명을 입력하십시오

Ok, 성공적으로 1 차원 배열의 요소를 인쇄했습니다. 이제 2 차원 배열을 고려하겠습니다. 2 차원 배열을 "number2"로 선언하고 "Arrays.deepToString ()"키워드를 사용하여 요소를 인쇄합니다. '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));
      }
}

출력을 고려하고

여기에 이미지 설명을 입력하십시오

동시에 두 개의 for 루프를 사용하면 2D 요소를 인쇄 할 수 있습니다. 감사합니다!


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

이 내가이 배열을 인쇄하는 가장 짧은 방법이라고 생각하십시오
Manjitha teshara

"어레이 (번호 배열)가 선언 된 메모리 주소가 인쇄됩니다"시스템 해시 코드는 객체의 사실이 아니며, 메모리 주소를 포함하여 많은 것을 기반으로 할 수 있지만 나중에 변경 될 수 있으며 해시 코드는 그렇지 않습니다. 변화. 현재는 대부분 임의의 숫자입니다. gotofinal.dev/java/2017/10/08/java-default-hashcode.html
GotoFinal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.