etc./StackOverFlow

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

청렴결백한 만능 재주꾼 2021. 12. 3. 08:21
반응형

질문자 :Alex Spurling


Java에서 배열은 toString() 재정의하지 않으므로 직접 인쇄하려고 하면 Object.toString() 정의된 대로 className + '@' + hashCode 16진수를 얻습니다.

 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 ]

Community Wiki

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

 import java.util.Arrays;

그런 다음 시도:

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

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

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

Limbic System

그러나 "항상 표준 라이브러리를 먼저 확인하십시오"에 관해서는 Arrays.toString( myarray )

--이 작업을 수행하는 방법을 보기 위해 myarray 유형에 집중했기 때문입니다. 이 작업을 반복하고 싶지 않았습니다. Eclipse 디버거에서 본 것과 유사하게 만들기 위해 쉬운 호출을 원했는데 myarray.toString()이 수행하지 않았을 뿐입니다.

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

Russ Bateman

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

Eric Baker

Java 8부터 String 클래스 에서 제공 join() 메서드를 사용하여 대괄호 없이 배열 요소를 인쇄하고 선택한 구분 기호(아래 표시된 예의 공백 문자)로 구분할 수도 있습니다. :

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

출력은 "Hey there amigo!"입니다.


laylaylom

자바 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]
[존, 메리, 밥]
1
2

4
5
남자
메리
단발

다차원 배열 인쇄 다차원 배열 을 인쇄하려는 경우 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]]
[[존, 브라보], [메리, 리], [밥, 존슨]]
11
12
21
22
31
32
33
남자
브라보
메리
이씨
단발
존슨


akhil_mittal

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

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

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


Ross

Arrays.toString

직접적인 대답으로 Arrays.toStringArrays.deepToString 메서드를 사용 하여 @Esko를 비롯한 여러 사람이 제공하는 솔루션 이 가장 좋습니다.

자바 8 - Stream.collect(joining()), Stream.forEach

아래에 제안된 다른 방법 중 일부를 나열하려고 합니다. 가장 주목할만한 추가 사항은 Stream.collect 연산자를 사용하여 joining Collector String.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);

YoYo

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

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

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

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

Arrays.deepToString(arr) 메서드는 구분자 문자열을 취해야 하지만 불행히도 그렇지 않습니다.


Rhyous

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

somedude

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]] [[다섯 번째, 여섯 번째], [일곱 번째, 여덟 번째]]

리소스: 배열에 액세스


Afee

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

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

그것은 당신의 1, 2, 3, 4, 5로 출력을 제공합니다


Andrew_Dublin

어떤 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 }

Greesh Kumar

최근 Vanilla #Java 에서 이 게시물을 보았습니다. Arrays.toString(arr); 작성하는 것은 그리 편리하지 않습니다. , 다음 가져오기 java.util.Arrays; 항상.

이것은 어떤 방법으로든 영구적인 수정 사항이 아닙니다. 디버깅을 더 간단하게 만들 수 있는 해킹입니다.

배열을 직접 인쇄하면 내부 표현과 hashCode가 제공됩니다. 이제 모든 클래스에는 부모 유형으로 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 를 추가하여 클래스 경로에 간단히 추가할 수 있습니다.

이제 Java 5부터 deepToString(..) 사용할 수 있으므로 toString(..) deepToString(..) 으로 쉽게 변경하여 다른 배열을 포함하는 배열에 대한 지원을 추가할 수 있습니다.

나는 이것이 매우 유용한 해킹이라는 것을 알았고 Java가 이것을 간단히 추가할 수 있다면 좋을 것입니다. 문자열 표현이 문제가 될 수 있기 때문에 매우 큰 배열을 가질 때 발생할 수 있는 잠재적인 문제를 이해합니다. 그러한 경우에 대비 System.out 또는 PrintWriter 와 같은 것을 전달할 수 있습니다.


Debosmit Ray

자바 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 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

Array를 인쇄하는 방법은 다음과 같습니다.

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

Ravi Patel

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

 char A[] = {'a', 'b', 'c'}; System.out.println(A); // no other arguments

인쇄물

 abc

Roam

배열을 반복하면서 반복하면서 각 항목을 인쇄할 수 있습니다. 예를 들어:

 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

Dylan Black

내가 시도한 단순화 된 바로 가기는 다음과 같습니다.

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

인쇄됩니다

 1 2 3

이 접근 방식에는 루프가 필요하지 않으며 작은 어레이에만 가장 적합합니다.


Mohamed Idris

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>

Haim Raman

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

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

hasham.98

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

잭슨 사용:

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

Gson 사용:

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

Jean Logeart

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

fjnk

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

user3369011

이것은 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.

Peter Lawrey

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]

shellhub

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부터 String 클래스에서 제공하는 join() 메서드를 사용하여 대괄호 없이 배열 요소를 인쇄하고 선택한 구분 기호(표시된 예제의 공백 문자)로 구분할 수도 있습니다. 아래에)

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

` 출력은 "Hey there amigo!"입니다.


Anubhav Mishra

가능한 인쇄 기능은 다음과 같습니다.

 public static void printArray (int [] array){ System.out.print("{ "); for (int i = 0; i < array.length; i++){ System.out.print("[" + array[i] + "] "); } System.out.print("}"); }

예를 들어 메인이 다음과 같다면

 public static void main (String [] args){ int [] array = {1, 2, 3, 4}; printArray(array); }

출력은 { [1] [2] [3] [4] }입니다.


Chiara Tumminelli

자바 8에서 :

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

Mehdi

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}

Pradip Karki

출처 : http:www.stackoverflow.com/questions/409784/whats-the-simplest-way-to-print-a-java-array

반응형