HOWTO · Java

Java で文字列を Int 配列に変換する

この記事では、Java で String を int 配列に変換する方法を紹介します。

このページの内容

Java 言語では、問題ステートメントについて考えるためのいくつかのアプローチがあります。

まず、問題の説明を 2つの部分に分けてみましょう。

  1. 単純な文字列を文字列配列に変換します。
  2. 文字列配列を int 配列に変換します。

上記の 2つのステップを図で表したものは次のとおりです。

Java の int へのフローチャート文字列

replaceAll() メソッドを使用して文字列を Int 配列に変換する

regexreplacement の 2つの引数を取る String クラスの replaceAll() メソッドを使用できます。このメソッドは、指定された正規表現を指定された置換値に置き換えます。そして、チェーン関数の最後に、split() メソッドが使用されます。このメソッドは、指定された文字に基づいて文字列を分割します。

値が文字列配列に分割および収集される場合は、Integer.parseInt() 関数を使用する必要があります。parseInt() メソッドは NumberFormatException をスローするため、例外をキャッチするには、ステートメントを 1つの try...catch ブロックに含める必要があります。

以下は、文字列から int 配列への変換を示すサンプルプログラムです。

package stringToIntArray;

import java.util.Arrays;

public class ConvertStringToIntArray {
  public static void main(String... args) {
    String testString = "[1,2,356,678,3378]";

    String[] separatedStrings = testString.replaceAll("\\[", "").replaceAll("]", "").split(",");

    int[] intArray = new int[separatedStrings.length];

    for (int i = 0; i < separatedStrings.length; i++) {
      try {
        intArray[i] = Integer.parseInt(separatedStrings[i]);
      } catch (Exception e) {
        System.out.println("Unable to parse string to int: " + e.getMessage());
      }
    }

    System.out.println(Arrays.toString(intArray));
  }
}

出力:

[1,2,356,678,3378]

testString の値が [1,2,356,678,3378,f] の場合、例外がスローされ、出力は次のようになります。

Unable to parse string to int: For input string: "f"
[1, 2, 356, 678, 3378, 0]

Java 8 ストリームライブラリを使用して文字列を Int 配列に変換する

以下のプログラムでは、最初に、Arrays.stream() 関数を使用しました。これにストリームを提供するために、最初と最後のインデックスパラメータを受け取る String クラスの substring() メソッドを使用しました。返された文字列に split() 関数が適用され、区切り文字に基づいて指定された文字列が分割されます。

ストリーム上で map() 関数が適用されます。この関数は、任意の関数を引数として取り、ストリームを返します。String クラスの trim() 関数を指定して、先頭と後続の空白を削除しました。parseInt は、受け取った指定の文字列を int に変換します。toArray() は、変換された int 要素を配列にダンプします。

package stringToIntArray;

import java.util.Arrays;

public class StringToIntUsingJava
8Stream {
  public static void main(String[] args) {
    String str = "[1, 2, 3, 4, 5]";

    int[] arr = Arrays.stream(str.substring(1, str.length() - 1).split(","))
                    .map(String::trim)
                    .mapToInt(Integer::parseInt)
                    .toArray();

    System.out.println(Arrays.toString(arr));
  }
}

出力:

[1, 2, 3, 4, 5]

StringTokenizer と関数を使用して文字列を Int 配列に変換する

コンストラクターStringTokenizer() を使用して StringTokenizer オブジェクトをインスタンス化します。コンストラクターは、入力文字列と区切り文字を使用して、トークン化された文字列を形成します。トークン化された文字列のトークンとしてサイズを持つ String と int の配列を同時に作成します。

countTokens() メソッドはトークンをカウントし、内部的に区切り文字をスキップします。hasMoreTokens() は、トークナイザー文字列にトークンが存在するかどうかを確認します。nextToken() は、文字列から次のトークンを取得します。文字列にトークンが存在しない場合、このメソッドは NoSuchElementException をスローします。

文字列トークンを int に変換し、int 配列に収集することを繰り返します。

package stringToIntArray;

import java.util.StringTokenizer;

public class StringToIntUsingStringTokenizer {
  public static void main(String[] args) {
    String testString = "[1,2,3,4]";
    StringTokenizer stk = new StringTokenizer(testString, "[,]");
    String[] strings = new String[stk.countTokens()];
    int[] integerArray = new int[stk.countTokens()];
    int i = 0;
    while (stk.hasMoreTokens()) {
      strings[i] = stk.nextToken();
      integerArray[i] = Integer.parseInt(strings[i]);
      i++;
    }
    for (int j = 0; j < integerArray.length; j++)
      System.out.println("number[" + j + "]=" + integerArray[j]);
  }
}

出力:

number[0]=1
number[1]=2
number[2]=3
number[3]=4