Javaでコンマ区切り文字列をリストに変換する

1. 概要

このチュートリアルでは、カンマ区切りの_String_を文字列の_List_に変換する方法を見ていきます。 さらに、整数のカンマ区切りの_String_を_Integers_の_List_に変換します。

2. 依存関係

変換に使用するいくつかのメソッドには、https://search.maven.org/search?q=g:org.apache.commons%20AND%20a:commons-lang3[Apache Commons Lang 3]が必要です。およびhttps://search.maven.org/search?q=a:guava%20AND%20g:com.google.guava[Guava]ライブラリ。 それで、それらをpom.xmlファイルに追加しましょう:
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.8.1</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>27.0.1-jre</version>
</dependency>

3. 例の定義

始める前に、例で使用する2つの入力文字列を定義しましょう。 最初の文字列_countries、_にはコンマで区切られたいくつかの文字列が含まれ、2番目の文字列_ranks、_にはカンマで区切られた数字が含まれます。
String countries = "Russia,Germany,England,France,Italy";
String ranks = "1,2,3,4,5,6,7";
そして、このチュートリアル全体を通して、上記の文字列を、格納する文字列と整数のリストに変換します。
List<String> convertedCountriesList;
List<Integer> convertedRankList;
最後に、変換を実行した後、予想される出力は次のようになります。
List<String> expectedCountriesList = Arrays.asList("Russia", "Germany", "England", "France", "Italy");
List<Integer> expectedRanksList = Arrays.asList(1, 2, 3, 4, 5, 6, 7);

4. コアJava

最初のソリューションでは、コアJavaを使用して文字列を文字列と整数のリストに変換します。
最初に、__split、__a _String_クラスユーティリティメソッドを使用してlink:/java-split-string [文字列を文字列の配列に分割]します。 次に、新しい文字列の配列で_Arrays.asList_を使用して、文字列のリストに変換します。
List<String> convertedCountriesList = Arrays.asList(countries.split(",", -1));
数字の文字列を整数のリストに変えましょう。
_split_メソッドを使用して、数値文字列を文字列の配列に変換します。 次に、新しい配列の各文字列を整数に変換し、list __:__に追加します
String[] convertedRankArray = ranks.split(",");
List<Integer> convertedRankList = new ArrayList<Integer>();
for (String number : convertedRankArray) {
    convertedRankList.add(Integer.parseInt(number.trim()));
}
どちらの場合も、https://www.baeldung.com/string/split [_String_クラスの_split_ユーティリティメソッド]を使用して、コンマ区切りの文字列を文字列配列に分割します。
_countries_文字列の変換に使用されるlink:/string/split[overloaded _split_ method]には、値として-1を指定した2番目のパラメーター_limit_が含まれていることに注意してください。 これは、separatorパターンをできるだけ多く適用することを指定します。
*整数の文字列(_ranks_)を分割するために使用した_split_メソッドは、_limit_としてゼロを使用するため、空の文字列を無視します。

5. Javaストリーム

次に、https://www.baeldung.com/java-streams [Java Stream API]を使用して同じ変換を実装します。
まず、https://www.baeldung.com/string/split [_String_クラスの_split_メソッド]を使用して、_countries_文字列を文字列の配列に変換します。 次に、_Stream_クラスを使用して、配列を文字列のリストに変換します。
List<String> convertedCountriesList = Stream.of(countries.split(",", -1))
  .collect(Collectors.toList());
_Stream._を使用して、数値の文字列を整数のリストに変換する方法を見てみましょう。
繰り返しますが、最初に_split_メソッドを使用して数値の文字列を文字列の配列に変換し、_Stream_クラスの_of()_メソッドを使用して、結果の配列を_String_の_Stream_に変換します。
次に、_map(String:_:_ trim)_。*を使用して、_Stream_の各_String_の先頭と末尾のスペースをトリミングします。
次に、_map(Integer

parseInt)_をストリームに適用して、_Stream_のすべての文字列を_Integer_に変換します。

最後に、_Stream_で_collect(Collectors.toList())_を呼び出して、整数リストに変換します。
List<Integer> convertedRankList = Stream.of(ranks.split(","))
  .map(String::trim)
  .map(Integer::parseInt)
  .collect(Collectors.toList());

6. アパッチコモンズラング

このソリューションでは、https://www.baeldung.com/java-commons-lang-3 [Apache Commons Lang3]ライブラリを使用して変換を実行します。 Apache Commons Lang3は、コアJavaクラスを操作するためのいくつかのヘルパー関数を提供します。
最初に、_StringUtils.splitPreserveAllTokens._を使用して文字列を文字列の配列に分割します。次に、_Arrays.asList_メソッドを使用して新しい文字列配列をリストに変換します。
List<String> convertedCountriesList = Arrays.asList(StringUtils.splitPreserveAllTokens(countries, ","));
数字の文字列を整数のリストに変換しましょう。
再び_StringUtils.split_メソッドを使用して、文字列から文字列の配列を作成します。 次に、__ Integer.parseInt ___を使用してnew arrayの各文字列を整数に変換し、変換された整数をリストに追加します。
String[] convertedRankArray = StringUtils.split(ranks, ",");
List<Integer> convertedRankList = new ArrayList<Integer>();
for (String number : convertedRankArray) {
    convertedRankList.add(Integer.parseInt(number.trim()));
}
この例では、_splitPreserveAllTokens_メソッドを使用して__countries ___stringを分割し、_split_メソッドを使用して_ranks_文字列を分割しました。
これらの関数は両方とも文字列を配列に分割しますが、* _splitPreserveAllTokens_は、隣接するセパレーターによって作成された空の文字列を含むすべてのトークンを保持しますが、_split_メソッドは空の文字列を無視します*。
したがって、リストに含める空の文字列がある場合は、_split_の代わりに_splitPreserveAllTokens_を使用する必要があります。

7. グアバ

最後に、link:/category/guava/[Guava]ライブラリを使用して、文字列を適切なリストに変換します。
__countries __stringを変換するには、最初に_Splitter.on_をパラメーターとしてカンマを使用して呼び出し、文字列を分割する文字を指定します。
次に、_Splitter_インスタンスで__trimResults __methodを使用します。 これにより、作成された部分文字列の先頭と末尾の空白がすべて無視されます。
最後に、__ splitToList __methodを使用して入力文字列を分割し、リストに変換します。
List<String> convertedCountriesList = Splitter.on(",")
  .trimResults()
  .splitToList(countries);
それでは、数字の文字列を整数のリストに変換しましょう__.__
上記と同じプロセスを使用して、数字の文字列を再び文字列のリストに変換します__ __。
次に、* _ Lists _ *。* _ transform_メソッドを使用します。このメソッドは、文字列のリストを最初のパラメーターとして受け入れ、_Function_インターフェースの実装を2番目のパラメーターとして受け入れます*。
_Function_ interface実装は、リスト内の各文字列を整数に変換します。
List<Integer> convertedRankList = Lists.transform(Splitter.on(",")
  .trimResults()
  .splitToList(ranks), new Function<String, Integer>() {
      @Override
      public Integer apply(String input) {
          return Integer.parseInt(input.trim());
      }
  });

8. 結論

この記事では、カンマ区切りの_Strings_を文字列のリストと整数のリストに変換しました。 ただし、同様のプロセスに従って、_String_をプリミティブデータ型のリストに変換できます。
いつものように、この記事のコードはhttps://github.com/eugenp/tutorials/tree/master/java-strings-2[Github上]で入手できます。