配列から文字列への変換

配列から文字列への変換

1. 概要

この短いチュートリアルでは、文字列または整数の配列を文字列に変換し、再び変換する方法を見ていきます。

これは、一般的に使用されるライブラリのバニラJavaおよびJavaユーティリティクラスを使用して実現できます。

2. 配列を文字列に変換

文字列または整数の配列を文字列に変換する必要がある場合がありますが、残念ながら、この変換を実行する直接的な方法はありません。

配列に対するtoString()メソッドのデフォルトの実装は、オブジェクトのタイプとハッシュコードのみを通知するLjava.lang.String;@74a10858のようなものを返します。

ただし、java.util.Arraysユーティリティクラスは、配列のtoString()メソッドを含む、配列と文字列の操作をサポートします。

Arrays.toString() returns a string with the content of the input array.作成される新しい文字列は、角かっこ( "[]")で囲まれた配列の要素のコンマ区切りリストです。

String[] strArray = { "one", "two", "three" };
String joinedString = Arrays.toString(strArray);
assertEquals("[one, two, three]", joinedString);
int[] intArray = { 1,2,3,4,5 };
joinedString = Arrays.toString(intArray);
assertEquals("[1, 2, 3, 4, 5]", joinedString);

また、Arrays.toString(int[])メソッドがこのタスクをうまくボタンで留めてくれるのは素晴らしいことですが、独自に実装できるさまざまなメソッドと比較してみましょう。

2.1. StringBuilder.append()

まず、StringBuilder.append()を使用してこの変換を行う方法を見てみましょう。

String[] strArray = { "Convert", "Array", "With", "Java" };
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < strArray.length; i++) {
    stringBuilder.append(strArray[i]);
}
String joinedString = stringBuilder.toString();
assertEquals("ConvertArrayWithJava", joinedString);

さらに、整数の配列を変換するために、同じアプローチを使用できますが、代わりに、StringBuilderに追加するときにInteger.valueOf(intArray[i]) を呼び出します。

2.2. Java Streams API

Java 8以降では、要素を結合し、指定された区切り文字(この場合は空の文字列)で要素を区切ることによって新しい文字列を生成するString.join()メソッドを提供しています。

String joinedString = String.join("", new String[]{ "Convert", "With", "Java", "Streams" });
assertEquals("ConvertWithJavaStreams", joinedString);

さらに、Java Streams APIのCollectors.joining()メソッドを使用して、Streamの文字列をソース配列と同じ順序で結合できます。

String joinedString = Arrays
    .stream(new String[]{ "Convert", "With", "Java", "Streams" })
    .collect(Collectors.joining());
assertEquals("ConvertWithJavaStreams", joinedString);

2.3. StringUtils.join()

そして、Apache Commons Langはこれらのようなタスクから除外されることは決してありません。

StringUtilsクラスには、文字列の配列を単一の文字列に変更するために使用できるいくつかのStringUtils.join()メソッドがあります。

String joinedString = StringUtils.join(new String[]{ "Convert", "With", "Apache", "Commons" });
assertEquals("ConvertWithApacheCommons", joinedString);

2.4. Joiner.join()

そして、負けないように、GuavaはそのJoiner classと同じように対応します。 Joiner classは流暢なAPIを提供し、データを結合するためのいくつかのヘルパーメソッドを提供します。

たとえば、区切り文字を追加するか、null値をスキップできます。

String joinedString = Joiner.on("")
        .skipNulls()
        .join(new String[]{ "Convert", "With", "Guava", null });
assertEquals("ConvertWithGuava", joinedString);

3. 文字列を文字列の配列に変換

同様に、文字列を、指定された区切り文字で分割された入力文字列のサブセットを含む配列に分割する必要がある場合もあります。これを行う方法も見てみましょう。

3.1. String.split()

まず、区切り文字なしでString.split()メソッドを使用して空白を分割することから始めましょう。

String[] strArray = "loremipsum".split("");

どれが生成されます:

["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]

3.2. StringUtils.split()

次に、ApacheのCommons LangライブラリのStringUtilsクラスをもう一度見てみましょう。

文字列オブジェクトの多くのnullセーフメソッドの中で、StringUtils.split().を見つけることができます。デフォルトでは、空白の区切り文字を想定しています。

String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");

結果は次のとおりです。

["lorem", "ipsum", "dolor", "sit", "amet"]

ただし、必要に応じて区切り文字を指定することもできます。

3.3. Splitter.split()

最後に、Splitterの流暢なAPIでGuavaを使用することもできます。

List resultList = Splitter.on(' ')
    .trimResults()
    .omitEmptyStrings()
    .splitToList("lorem ipsum dolor sit amet");
String[] strArray = resultList.toArray(new String[0]);

どれが生成されます:

["lorem", "ipsum", "dolor", "sit", "amet"]

4. 結論

この記事では、コアJavaと一般的なユーティリティライブラリを使用して、配列を文字列に変換し、再び変換する方法を説明しました。

もちろん、これらすべての例とコードスニペットの実装はover on GitHubにあります。