HOWTO · Java
Java で文字列を Int 配列に変換する
この記事では、Java で String を int 配列に変換する方法を紹介します。
このページの内容
Java 言語では、問題ステートメントについて考えるためのいくつかのアプローチがあります。
まず、問題の説明を 2つの部分に分けてみましょう。
- 単純な文字列を文字列配列に変換します。
- 文字列配列を int 配列に変換します。
上記の 2つのステップを図で表したものは次のとおりです。
replaceAll() メソッドを使用して文字列を Int 配列に変換する
regex と replacement の 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