ウェブサイト検索

Javaの文字列配列を文字列にする


今日はJavaのString配列をStringに変換する方法を見ていきます。特定の要件のためにString配列をStringに変換する必要があることがあります。例えば、配列の内容をログに記録したり、String配列の値をStringに変換して他のメソッドを呼び出す必要がある場合です。

Javaの文字列配列を文字列に変換する

ほとんどの場合、オブジェクトのtoString()メソッドを呼び出して、文字列の表現を取得します。Javaのストリング配列に対してtoString()メソッドを呼び出すと何が起こるか見てみましょう。

package com.journaldev.util;

public class JavaStringArrayToString {

	public static void main(String[] args) {
		String[] strArr = new String[] {"1","2","3"};
		
		String str = strArr.toString();
		
		System.out.println("Java String array to String = "+str);
	}

}

以下の画像は、上記のプログラムによって生成された出力を示しています。

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

Javaの文字列配列から文字列への例

では、JavaでString配列をStringに変換する方法は?個々の要素に対してtoString()メソッドを呼び出すArrays.toStringメソッドを使用し、StringBuilderを使ってStringを作成することができます。

public static String toString(Object[] a) {
    if (a == null)
        return "null";

    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(String.valueOf(a[i]));
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

特定の形式要件がある場合、文字列配列を文字列に変換するための独自のメソッドを作成することもできます。以下は、これらのメソッドの動作と生成される出力を示す簡単なプログラムです。

package com.journaldev.util;

import java.util.Arrays;

public class JavaStringArrayToString {

	public static void main(String[] args) {
		String[] strArr = new String[] { "1", "2", "3" };

		String str = Arrays.toString(strArr);
		System.out.println("Java String array to String = " + str);

		str = convertStringArrayToString(strArr, ",");
		System.out.println("Convert Java String array to String = " + str);

	}

	private static String convertStringArrayToString(String[] strArr, String delimiter) {
		StringBuilder sb = new StringBuilder();
		for (String str : strArr)
			sb.append(str).append(delimiter);
		return sb.substring(0, sb.length() - 1);
	}
}

したがって、配列のtoString()メソッドを使用すると、無意味なデータが返されます。JavaのArraysクラスは、toString(Object[] objArr)を提供しており、これは配列の要素を反復処理し、それらのtoString()実装を使用して配列の文字列表現を返します。だからこそ、この関数を使用すると、配列の内容が印刷され、ログ記録の目的にも使用できることがわかります。文字列配列内のすべての文字列要素を特定の区切り文字で結合したい場合は、convertStringArrayToString(String[] strArr, String delimiter)メソッドを使用できます。このメソッドは、結合した後の文字列を返します。

Javaの配列を文字列に変換する例

では、String配列をStringの例に拡張して、他のカスタムクラスと一緒に使用できるようにしましょう。こちらが実装です。

package com.journaldev.util;

import java.util.Arrays;

public class JavaArrayToString {

	public static void main(String[] args) {
		A[] arr = { new A("1"), new A("2"), new A("3") };

		// default toString() method
		System.out.println(arr.toString());

		// using Arrays.toString() for printing object array contents
		System.out.println(Arrays.toString(arr));

		// converting Object Array to String
		System.out.println(convertObjectArrayToString(arr, ","));
	}

	private static String convertObjectArrayToString(Object[] arr, String delimiter) {
		StringBuilder sb = new StringBuilder();
		for (Object obj : arr)
			sb.append(obj.toString()).append(delimiter);
		return sb.substring(0, sb.length() - 1);

	}

}

class A {
	private String name;

	public A(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		System.out.println("A toString() method called!!");
		return this.name;
	}
}

上記のJava配列から文字列への例プログラムによって生成された出力は次のとおりです;

[Lcom.journaldev.util.A;@7852e922
A toString() method called!!
A toString() method called!!
A toString() method called!!
[1, 2, 3]
A toString() method called!!
A toString() method called!!
A toString() method called!!
1,2,3

ですので、JavaのString配列をStringに変換する方法を調べ、それをカスタムオブジェクトとともに使用するように拡張しました。これでJava配列をStringに変換することについてはすべてです。

私たちのGitHubリポジトリから、さらに多くのコアJavaの例をチェックアウトできます。

参照: Java 配列 toString API ドキュメント

関連記事: