JavaのString配列をStringに変換する
今日は、JavaのString配列をStringに変換する方法について詳しく見ていきます。時には、特定の要件に合わせてString配列をStringに変換する必要があります。例えば、配列の中身をログに記録したい場合や、String配列の値をStringに変換して他のメソッドを呼び出す必要がある場合などです。
JavaのString配列をStringに変換する方法
ほとんどの場合、StringのtoString()メソッドを呼び出してオブジェクトの文字列表現を取得します。では、JavaでString配列のtoString()メソッドを呼び出した場合に何が起こるか見てみましょう。
package com.scdev.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);
}
}
上記のプログラムによって生成された出力が以下の画像に表示されています。上記の出力の理由は、配列に対してtoString()メソッドを呼び出すと、それが以下のように実装されたObjectスーパークラスに移行するためです。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
JavaのString配列を文字列に変換する例
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(", ");
}
}
特定のフォーマット要件がある場合、String配列をStringに変換するための独自の方法も作成することができます。以下は、これらの方法を実演し、生成された出力を示すシンプルなプログラムです。
package com.scdev.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()実装を使用して配列の文字列表現を返すtoString(Object[] objArr)を提供しています。したがって、この関数を使用すると、配列の内容が印刷され、ログ出力に使用することができます。特定の区切り文字と共に文字列配列のすべての要素を結合したい場合は、convertStringArrayToString(String[] strArr, String delimiter)メソッドを使用して、それらを結合した後の文字列を返すことができます。
Javaの配列を文字列に変換する例
では、他のカスタムクラスでも使用できるように、String配列を拡張してみましょう。こちらが実装です。
package com.scdev.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.scdev.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ドキュメント