配列から文字列への変換
1. 概要
この短いチュートリアルでは、文字列または整数の配列を文字列に変換して、元に戻す方法について説明します。
これは、一般的に使用されるライブラリのバニラJavaおよびJavaユーティリティクラスを使用して実現できます。
2. 配列を文字列に変換する
文字列または整数の配列を文字列に変換する必要がある場合もありますが、残念ながら、この変換を実行する直接的な方法はありません。
配列に対するtoString()メソッドのデフォルトの実装は、 Ljava.lang.String; @ 74a10858 のようなものを返します。これは、オブジェクトのタイプとハッシュコードのみを通知します。
ただし、 java.util.Arrays ユーティリティクラスは、配列の toString()メソッドを含む、配列と文字列の操作をサポートします。
Arrays.toString()は、入力配列の内容を含む文字列を返します。作成される新しい文字列は、角かっこ( “[]”)で囲まれた配列の要素のコンマ区切りリストです。
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 StreamsAPIのCollectors.joining()メソッドを使用して、Streamの文字列をソース配列と同じ順序で結合できます。
String joinedString = Arrays
.stream(new String[]{ "Convert", "With", "Java", "Streams" })
.collect(Collectors.joining());
assertEquals("ConvertWithJavaStreams", joinedString);
2.3. StringUtils.join()
そして、 Apache CommonsLangはこのようなタスクから除外されることはありません。
StringUtils クラスには、文字列の配列を単一の文字列に変更するために使用できるいくつかの StringUtils.join()メソッドがあります。
String joinedString = StringUtils.join(new String[]{ "Convert", "With", "Apache", "Commons" });
assertEquals("ConvertWithApacheCommons", joinedString);
2.4. Joiner.join()
そして、負けないように、GuavaはそのJoinerクラスと同じように対応します。 Joiner クラスは、流暢な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のCommonsLangライブラリのStringUtilsクラスをもう一度見てみましょう。
文字列オブジェクトに対する多くのnullセーフメソッドの中で、次のことがわかります。
String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");
その結果:
["lorem", "ipsum", "dolor", "sit", "amet"]
ただし、必要に応じて区切り文字を提供することもできます。
3.3. Splitter.split()
最後に、GuavaをSplitterの流暢なAPIとともに使用することもできます。
List<String> 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と一般的なユーティリティライブラリを使用して、配列を文字列に変換し、元に戻す方法を説明しました。
もちろん、これらすべての例とコードスニペットの実装は、GitHubのにあります。