確認 - Java配列を印刷する最も単純な方法は何ですか?



配列 に 入れる java (20)

Arrays.toString

直接の答えとして、 Arrays.deepToStringメソッドとArrays.deepToStringメソッドを使用してArrays.toString を含むいくつかのソリューションが提供されています。

Java 8 - Stream.collect(joined())、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);

Javaでは、配列はtoString()オーバーライドしないため、直接印刷しようとすると、 Object.toString()定義されているように、配列のhashCodeのclassName + @ +が得られます。

int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray);     // prints something like '[[email protected]'

しかし、通常、私たちは実際に[1, 2, 3, 4, 5] 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]

Answer #1

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

Answer #2

Java 5以降、単純配列の場合はArrays.deepToString(arr) 、入れ子配列の場合はArrays.toString(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 ]

Answer #3

Java 8では簡単です。 2つのキーワードがあります

  1. ストリーム: Arrays.stream(intArray).forEach
  2. メソッド参照::println

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

配列のすべての要素を同じ行に出力する場合は、 println代わりにprintを使用しprint 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));

Answer #4

Java 8以前では、 Arrays.toString(array)を使用して1次元配列を、 Arrays.deepToString(array)を多次元配列として使用できました。 私たちはStreamlambdaオプションをJava 8で持っています。これは配列の印刷にも使用できます。

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
ジョン
メアリー
ボブ

多次元配列の印刷多次元配列を出力したい場合、 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()メソッドがマップされたストリームの各要素をマップするArrays.stream(T[])提供されたマッピング関数を各要素に適用することによって生成される。

出力は次のとおりです。

[[11,12]、[21,22]、[31,32,33]]
[[John、Bravo]、[Mary、Lee]、[Bob、Johnson]]
11
12
21
22
31
32
33
ジョン
ブラボー
メアリー
リー
ボブ
ジョンソン


Answer #5

Java 8以降、 Stringクラスで提供されるjoin()メソッドを利用して、括弧を使わずに配列要素を出力し、区切り文字で区切って指定することもできます(下の例では空白文字です) :

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

出力は "こんにちはamigo!"になります。


Answer #6

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>

Answer #7

Arrays.deepToString(arr)は、1行にのみ印刷します。

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

実際に表を2次元の表として印刷するには、これを行う必要がありました。

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

Arrays.deepToString(arr)メソッドは区切り文字列を取る必要がありますが、残念ながらそれはしません。


Answer #8

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、2、3、4]

  1. toString()使用

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

出力:[1、2、3、4]

  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、Eighth]]

リソース: 配列にアクセスする


Answer #9

配列を印刷する方法は次のとおりです

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

Answer #10

しかし、これは、 "常に標準ライブラリを最初にチェックしてください"ということを知ってうれしいですが、 Arrays.toString( myarray )トリックに遭遇したことはありませんでした。

私はmyarrayのタイプに集中していたので、これを行う方法を見てください。 私はそのことを反復する必要はありませんでした。私は簡単な呼び出しをEclipseデバッガに表示されるようにしたいと思い、myarray.toString()はそれをやっていないだけでした。

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

Answer #11

すべての回答に追加するには、オブジェクトをJSON文字列として出力することもできます。

ジャクソンの使用:

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

Gsonを使って:

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

Answer #12

印刷する場合は、 Arrays.toStringを使用できるようなArrayコンテンツを評価してください

jshell> String[] names = {"ram","shyam"};
names ==> String[2] { "ram", "shyam" }

jshell> Arrays.toString(names);
$2 ==> "[ram, shyam]"

jshell> 

Answer #13

常に最初に標準ライブラリをチェックしてください。 試してください:

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

または配列に他の配列が要素として含まれている場合

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

Answer #14

私の意見では、 forループを使うのが最も簡単な方法です。 ここでは、あなたのintArrayに基づくサンプルコードがあります

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

1、2、3、4、5のように出力します


Answer #15

私は最近、 バニラ#Javaでこのポストに出くわしました。 Arrays.toString(arr);書くのはあまり便利ではありませんArrays.toString(arr); java.util.Arrays;をインポートし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.outPrintWriterようなものを渡すかもしれません。


Answer #16

配列をループして、ループするごとに各項目を出力することができます。 例えば:

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

Answer #17

配列を出力する最も簡単な方法は、for-loopを使うことです:

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

Answer #18
// 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]

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




printing