질문자 :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 BatemanJDK1.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 BakerJava 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
이제 배열을 인쇄하기 위한 Stream
및 lambda
옵션이 있습니다.
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_mittalJava 1.4를 사용하는 경우 대신 다음을 수행할 수 있습니다.
System.out.println(Arrays.asList(array));
(물론 1.5 이상에서도 작동합니다.)
RossArrays.toString
직접적인 대답으로 Arrays.toString
및 Arrays.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);
YoYoArrays.deepToString(arr)
은 한 줄에만 인쇄합니다.
int[][] table = new int[2][2];
실제로 테이블을 2차원 테이블로 인쇄하려면 다음을 수행해야 했습니다.
System.out.println(Arrays.deepToString(table).replaceAll("],", "]," + System.getProperty("line.separator")));
Arrays.deepToString(arr)
메서드는 구분자 문자열을 취해야 하지만 불행히도 그렇지 않습니다.
Rhyousfor(int n: someArray) { System.out.println(n+" "); }
somedudeJava에서 배열을 인쇄하는 다양한 방법:
간단한 방법
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);
출력: [하나, 둘, 셋, 넷]
toString()
String[] array = new String[] { "One", "Two", "Three", "Four" }; System.out.println(Arrays.toString(array));
출력: [하나, 둘, 셋, 넷]
배열의 배열 인쇄하기
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에서는 쉽습니다. 두 개의 키워드가 있습니다
- 스트림:
Arrays.stream(intArray).forEach
메서드 참조: ::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));
suatCoskunArray를 인쇄하는 방법은 다음과 같습니다.
// 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 Idrisorg.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 RamanFor-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]
fjnkpublic 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 Lawreyjdk 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]
shellhubJDK1.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);
MehdiCommons.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