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

Rashmi Patidar 2023年10月12日
  1. replaceAll() メソッドを使用して文字列を Int 配列に変換する
  2. Java 8 ストリームライブラリを使用して文字列を Int 配列に変換する
  3. StringTokenizer と関数を使用して文字列を Int 配列に変換する
Java で文字列を 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
著者: Rashmi Patidar
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

関連記事 - Java String

関連記事 - Java Array