Java에서 배열은 toString()
을 재정의하지 않으므로 배열을 직접 인쇄하려고 하면 className
+ '@' + 배열의 hashCode
의 헥스가 Object.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));
//출력: [[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 ]
그러나 항상 " 대해 아는 것이 좋다, 표준 라이브러리를 first" 확인합니다. # 39 의 i& 귀의하지않는다고 그 트릭 (myarray) '' 라이s.토스트링 발견했다; d
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 참가하십시오 제공한 [string 클래스에] [1] 인쇄하려면 아웃해야 어레이입니다 요소 없이 브래킷에 분판된 구분 기호로 선택할 수 있으며, 즉 공백 문자를 예를 들어 아래 참조).
String[] greeting = {"Hey", "there", "amigo!"};
String delimiter = " ";
String.join(delimiter, greeting)
어이, 아미고! ", " 출력됩니다.
[1]: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html # join-java.lang.CharSequence-java.lang.CharSequence. -
[솔루션을 제공하는 등 여러 @Esko] 비호환성의 직접판매용 오토메이티드 (https://www.google.com/search? 클라이언트입니다 = safari&, ie =, =, = q = html+jump+to+anchor& UTF-8& ᅬ en& rls, UTF-8) 을 사용하여, ['라이s.토스트링'] (https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html # % toString% 28java.lang.object [] 29) 와 ['라이자이딥토스트링'] (https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html # %29 deeptostring% 28java.lang.object []) 는 단순히 최고라니까요 방법,
아래 목록 중 일부는 내가 할 수 있는 가장 눈에 띄는 것은 물론, 조금 다른 방법으로 제안됩니다 시도중입니다 향상시키십시오 사용 중인 ['스트리엄스콜레스'] (https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html # collect-java.util.stream.Collector-) 연산자를 사용하여 ['에'] (https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html # joining-java.lang.CharSequence-) '를 진행하고 있는', '어떤' 스테링스타인 모음기 한다.
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);
우리는 한 차원 배열 (array) '와' 사용할 수 있습니다 '라이s.토스트링 인쇄하려면 라이자이딥토스트링 (array)' 는 다차원 배열입니다.
이제 우리는 람다 (λ) '의' 옵션 '와' 스트리밍합니다 인쇄하려면 어레이입니다.
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 3 4 5 존 마리아여 밥
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);
}
이제 가리키십시오 에로남이네 준수하십시오 라이스윈슬림 (T []) ', 즉' 방법 '의 경우 int, int [] []', '다음' 우리 'Stream< 되돌려줍니다 > 메서드로부터 프라트마pto린트 ()' 의 내용을 통해 각 요소에 매핑하므로 스트리밍합니다 제공된 구성도를 기능을 적용해 만든 매핑되었습니다 스트리밍합니다 각 요소.
출력은:
>, [[11, 12], [21, 22], [31, 32, 33]] [[존, 브라보], [마리아여, 리], [밥 존슨은]] 11 12 21 22 31 32tb 33 존 브라보 마리아여 리 밥 존슨
라이자이딥토스트링 (도착) '만' 한 줄에 인쇄합니다.
int[][] table = new int[2][2];
실제로 한 표, 2 차원 테이블 확보하십시오 인쇄하려면 내가 가진 이 작업을 수행할 수 있습니다.
System.out.println(Arrays.deepToString(table).replaceAll("],", "]," + System.getProperty("line.separator")));
이 방법을 취해야 할 것 같다 (도착) '이 아니라' 라이자이딥토스트링 분리자를 문자열이어야 죄송합니다. doesn& # 39, t.
List< String>; = new ArrayList< String> 목록 ();;; 리스트리아다 (One" ";). 리스트리아다 (Two" ";). 리스트리아다 (Three" ";). 리스트리아다 (Four" ";). // 인쇄인쇄 콘솔 목록 시스템지우트리프린틀린 (목록).
>. 출력: >. [하나, 둘, 셋, 넷]
문자열 [], [], {" One" " Two" = new 문자열이어야 어레이입니다;;;;, " " Three" Four"; }; 시스템지우트리프린틀린 (라이s.토스트링 (array));
>. 출력: [하나, 둘, 셋, 넷]
문자열 [], [], {" Fifth" arr1 = new 문자열이어야 " Sixth"; }; 문자열 [], [], {" arr2 = new 문자열이어야 Seventh" " Eight"; }; 문자열 [] [], [] []}, {arr1 arr2 라이오파레이 = new 구체화하십시오 시스템지우트리프린틀린 (라이오파레이); 시스템지우트리프린틀린 (라이s.토스트링 (라이오파레이)); 시스템지우트리프린틀린 (라이자이딥토스트링 (라이오파레이));
>. 출력: [[[[라자바드란g. 스트레이, @10385c1, @1ad086a 라자바드란g. 스트레이. >. [라자바드란g. 스트레이, @42719c] [[5, 6], [일곱, 여덟 번째]]
출처: 액세스만 어레이에서는
자바 가상 머신 (jvm) 에 8 개 it 쉽지 않다. 두 가지 키워드
int 안타이 int = new [] [] {1, 2, 3, 4, 5}; 라이스윈슬림 (안타이) 스포리치 (System.out::println);
인쇄하려면 같은 줄에 있는 모든 요소를 어레이입니다 프린틀린 '즉' 대신 '다음' 인쇄하십시오 됩니다
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));
작업 중 JDK 버전으로 사용할 수 있어야 합니다.
System.out.println(Arrays.asList(array));
이 경우 '' 어레이입니다 객체에는 사용할 수 있습니다. 이 경우 '대신' 어레이입니다 map_layer 프리미티브 유형, 래퍼 클래스뿐만 저장 효과로 다시 사용할 수 있습니다.
예:
int[] a = new int[]{1,2,3,4,5};
바꿀 수 있습니다.
Integer[] a = new Integer[]{1,2,3,4,5};
구로췌! 이는 변환할 수 있는 객체에 대한 어레이에서는 언급하십시오 어레이나 Object& # 39 의 어레이입니다 실행 속도가 느려질 수 많은 비용이 들고 사용할 수 있다. 이것은 성격상 자바 호출됨 오토보싱.
그래서 인쇄면이 대해서만 목적, It 사용하지 않아야 합니다. 우리는 어떤 함수의 매개 변수로 어레이에서는 및 유인물 등 원하는 형식을 담당하는 내말들어봐
public void printArray(int [] a){
//write printing code
}
이 왔는지 구현하므로) 의 [바닐라 # Java] (http://vanillajava.blogspot.com/2016/03/printing-arrays-by-hacking-jvm.html) 는 최근. # 39, writing 's not it& 라이s.토스트링 (도착),', '매우 편리하게 임포트하지 관심용 제바스티레비아라이스' all the time.
직접 어레이에서는 보기입니다 인쇄면이 내부 표현과 하시코드. 이제 '객체' 를 가지고 있는 모든 계층의 상위 유형. 따라서 왜안돼요 해킹 () '이' 로비치스토스트링? 수정 없이, 객체에는 클래스용 다음과 같습니다.
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'.
이제 가용성입니다 딥토스트링 (.) '와' 이후 'toString (.)' 로 Java 5 를 쉽게 사용할 수 있습니다 '딥토스트링 (.)' 을 포함하는 대한 지원 추가 어레이에는 다른 배열입니다.
내가 찾은 이 될 경우 매우 유익한 해킹 및 Java 추가할 수 있는 이 좋을 것입니다. 이해 할 수 있는 문제로 매우 큰 어레이에는 문자열 표현 때문에 문제가 됩니다. 아마 '또는' a '사태' 에 대해 같은 항목을 전달하십시오 시스템리우스 프린트라이터 등.
모든 문제의 답을 로케이터로 JSON 문자열은 인쇄면이 추가할 수 있는 옵션도.
Flexlm*용 잭슨:
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
System.out.println(ow.writeValueAsString(anyArray));
그슨 사용하여.
Gson gson = new Gson();
System.out.println(gson.toJson(anyArray));
// 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);
}