1. 概要

このチュートリアルでは、コンマ区切りのStringを文字列のListに変換する方法について説明します。 さらに、整数のコンマ区切りのStringIntegersListに変換します。

2. 依存関係

変換に使用するいくつかのメソッドには、 Apache Commons Lang3およびGuavaライブラリが必要です。 それでは、それらをpom.xmlファイルに追加しましょう。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.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 クラスユーティリティメソッドを使用して、文字列を文字列の配列分割します。 次に、新しい文字列配列で Arrays.asList を使用して、文字列のリストに変換します。

List<String> convertedCountriesList = Arrays.asList(countries.split(",", -1));

次に、数値の文字列を整数のリストに変換しましょう。

split メソッドを使用して、数値文字列を文字列の配列に変換します。 次に、新しい配列の各文字列を整数に変換し、リストに追加します

String[] convertedRankArray = ranks.split(",");
List<Integer> convertedRankList = new ArrayList<Integer>();
for (String number : convertedRankArray) {
    convertedRankList.add(Integer.parseInt(number.trim()));
}

どちらの場合も、Stringクラス splitユーティリティメソッドを使用して、カンマ区切りの文字列を文字列配列に分割します。

countries文字列の変換に使用されるoverloadedsplit method には、2番目のパラメーター limit が含まれていることに注意してください。このため、値は-1として指定されています。 これは、セパレータパターンをできるだけ多く適用する必要があることを指定します。

整数の文字列(ranks )を分割するために使用した split メソッドは、 limit としてゼロを使用するため、空の文字列を無視しますが、[X165X countrys文字列で使用される]splitは、返された配列に空の文字列を保持します。

5. Javaストリーム

次に、JavaストリームAPIを使用して同じ変換を実装します。

まず、Stringクラス splitメソッドを使用して、countrys文字列を文字列の配列に変換します。 次に、 Stream クラスを使用して、配列を文字列のリストに変換します。

List<String> convertedCountriesList = Stream.of(countries.split(",", -1))
  .collect(Collectors.toList());

Stream。を使用して数値の文字列を整数のリストに変換する方法を見てみましょう。

ここでも、最初に split メソッドを使用して数値の文字列を文字列の配列に変換し、結果の配列をStringStreamに変換します。 Streamクラスのof()メソッド。

次に、map(String :: Trim)。を使用して、ストリーム上の各文字列から先頭と末尾のスペースをトリミングします。

次に、ストリームに map(Integer :: parseInt)を適用して、Stream内のすべての文字列をIntegerに変換します。

最後に、 Streamcollect(Collectors.toList())を呼び出して、整数リストに変換します。

List<Integer> convertedRankList = Stream.of(ranks.split(","))
  .map(String::trim)
  .map(Integer::parseInt)
  .collect(Collectors.toList());

6. Apache Commons Lang

このソリューションでは、 Apache CommonsLang3ライブラリを使用して変換を実行します。 Apache Commons Lang3は、コアJavaクラスを操作するためのいくつかのヘルパー関数を提供します。

まず、 StringUtils.splitPreserveAllTokens を使用して文字列を文字列の配列に分割します。次に、Arrays.asListを使用して新しい文字列配列をリストに変換します。 メソッド:

List<String> convertedCountriesList = Arrays.asList(StringUtils.splitPreserveAllTokens(countries, ","));

次に、数値の文字列を整数のリストに変換してみましょう。

再びStringUtils.splitメソッドを使用して、文字列から文字列の配列を作成します。 次に、 Integer.parseInt を使用して、新しい配列の各文字列を整数に変換し、変換された整数をリストに追加します。

String[] convertedRankArray = StringUtils.split(ranks, ",");
List<Integer> convertedRankList = new ArrayList<Integer>();
for (String number : convertedRankArray) {
    convertedRankList.add(Integer.parseInt(number.trim()));
}

この例では、 splitPreserveAllTokens メソッドを使用して国の文字列を分割し、splitメソッドを使用してranks文字列を分割しました。

これらの関数は両方とも文字列を配列に分割しますが、 splitPreserveAllTokensは隣接するセパレーターによって作成された空の文字列を含むすべてのトークンを保持し、splitメソッドは空の文字列を無視します

したがって、リストに含めたい空の文字列がある場合は、splitの代わりにsplitPreserveAllTokensを使用する必要があります。

7. グアバ

最後に、 Guava ライブラリを使用して、文字列を適切なリストに変換します。

国の文字列を変換するには、最初に Splitter.on を呼び出し、パラメータとしてカンマを使用して、文字列を分割する文字を指定します。

次に、SplitterインスタンスでtrimResultsメソッドを使用します。 これにより、作成されたサブストリングの先頭と末尾の空白がすべて無視されます。

最後に、 splitToList メソッドを使用して、入力文字列を分割し、リストに変換します。

List<String> convertedCountriesList = Splitter.on(",")
  .trimResults()
  .splitToList(countries);

それでは、数値の文字列を整数のリストに変換しましょう

上記と同じプロセスを使用して、数値の文字列を文字列のリストに再度変換します。

次に、 Liststransformメソッドを使用します。このメソッドは、文字列のリストを最初のパラメーターとして受け入れ、Functionインターフェイスの実装を2番目のパラメーターとして受け入れます。

Function インターフェースの実装は、リスト内の各文字列を整数に変換します。

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を任意のプリミティブデータ型のリストに変換できます。

いつものように、この記事のコードはGithubから入手できます。