はじめに
この実験では、Java で文字列が整数に変換できるかどうかをチェックする方法を学びます。これは、ユーザー入力や外部ソースからのデータを処理するための基本的なスキルです。
変換を試みるための Integer.parseInt() メソッドを探索し、NumberFormatException を使用して潜在的なエラーを処理する方法を学び、文字列を解析する前に検証するテクニックを発見し、堅牢でエラーのないコードを確保します。
この実験では、Java で文字列が整数に変換できるかどうかをチェックする方法を学びます。これは、ユーザー入力や外部ソースからのデータを処理するための基本的なスキルです。
変換を試みるための Integer.parseInt() メソッドを探索し、NumberFormatException を使用して潜在的なエラーを処理する方法を学び、文字列を解析する前に検証するテクニックを発見し、堅牢でエラーのないコードを確保します。
このステップでは、Java で String(テキスト)を int(整数)に変換する方法を探索します。これは、特にユーザーから数値入力を取得したり、ファイルから数値を読み取ったりする際に、プログラミングで一般的なタスクです。
Java はこの目的のために Integer.parseInt() という組み込みメソッドを提供しています。それがどのように動作するか見てみましょう。
まず、~/project ディレクトリにいることを確認してください。必要に応じて、ターミナルで cd ~/project コマンドを使用できます。
次に、~/project ディレクトリに StringToInt.java という名前の新しい Java ファイルを作成しましょう。これは、左側のファイルエクスプローラーで右クリックし、「新しいファイル」を選択して StringToInt.java と入力することで行えます。
StringToInt.java ファイルをコードエディターで開き、以下のコードを貼り付けます。
public class StringToInt {
public static void main(String[] args) {
String numberString = "123";
int numberInt = Integer.parseInt(numberString);
System.out.println("The string is: " + numberString);
System.out.println("The integer is: " + numberInt);
}
}
新しい部分を見てみましょう。
String numberString = "123";:numberString という名前の String 変数を宣言し、値 "123" を割り当てます。"123" が二重引用符で囲まれていることに注意してください。これは文字列であることを示しています。int numberInt = Integer.parseInt(numberString);:これがこのステップの核心です。Integer.parseInt() メソッドを呼び出し、numberString を引数として渡します。このメソッドは、文字列 "123" を整数に変換しようとします。結果は numberInt という名前の int 変数に格納されます。System.out.println("The string is: " + numberString);:この行は元の文字列を出力します。System.out.println("The integer is: " + numberInt);:この行は変換された整数を出力します。ファイルを保存します(Ctrl+S または Cmd+S)。
次に、プログラムをコンパイルしましょう。ターミナルを開き、以下のコマンドを実行します。
javac StringToInt.java
コンパイルが成功すると、出力は表示されず、~/project ディレクトリに StringToInt.class ファイルが作成されます。
最後に、コンパイルされたプログラムを実行します。
java StringToInt
以下の出力が表示されるはずです。
The string is: 123
The integer is: 123
ご覧の通り、Integer.parseInt() メソッドは文字列 "123" を整数 123 に正常に変換しました。
次のステップでは、文字列が整数に変換できない場合に何が起こるかを探索します。
前のステップでは、Integer.parseInt() を使用して数字のみを含む文字列を整数に正常に変換しました。では、文字列に数字以外の文字が含まれている場合はどうなるでしょうか?調べてみましょう。
Integer.parseInt() が数値の有効な表現ではない文字列を変換しようとすると、NumberFormatException がスローされます。これは、数値文字列の形式に問題があることを示すエラーの一種です。
このようなエラーを適切に処理するために、try-catch ブロックを使用することができます。try-catch ブロックを使用すると、エラーを引き起こす可能性のあるコードを「試し」て、エラーが発生した場合にそれを「キャッチ」し、特定の方法で処理することができ、プログラムがクラッシュするのを防ぎます。
これを実証するために、StringToInt.java プログラムを変更してみましょう。
WebIDE エディターで StringToInt.java ファイルを開きます。
コードを変更して try-catch ブロックを追加し、入力文字列を変更します。
public class StringToInt {
public static void main(String[] args) {
String numberString = "abc"; // This string cannot be parsed as an integer
try {
int numberInt = Integer.parseInt(numberString);
System.out.println("The string is: " + numberString);
System.out.println("The integer is: " + numberInt);
} catch (NumberFormatException e) {
System.out.println("Error: Could not convert the string to an integer.");
System.out.println("Details: " + e.getMessage());
}
}
}
追加した部分は次の通りです。
String numberString = "abc";:文字列を "abc" に変更しました。これは明らかに有効な整数ではありません。try { ... }:try ブロック内のコードは、試行したいコードです。この場合、Integer.parseInt() の呼び出しです。catch (NumberFormatException e) { ... }:try ブロック内で NumberFormatException が発生した場合、catch ブロック内のコードが実行されます。System.out.println("Error: Could not convert the string to an integer.");:この行はユーザーにわかりやすいエラーメッセージを出力します。System.out.println("Details: " + e.getMessage());:この行は例外に関する詳細情報を出力します。これはデバッグに役立ちます。ファイルを保存します(Ctrl+S または Cmd+S)。
ターミナルで変更したプログラムをコンパイルします。
javac StringToInt.java
コンパイルしたプログラムを実行します。
java StringToInt
今回は、"abc" を整数として解析することができないため、NumberFormatException がキャッチされ、次のような出力が表示されるはずです。
Error: Could not convert the string to an integer.
Details: For input string: "abc"
プログラムがクラッシュする代わりに、catch ブロックがエラーを処理し、役立つメッセージを出力しました。これははるかに良いユーザー体験です!
try-catch ブロックを使用することは、予期しない入力や状況を処理できる堅牢なプログラムを作成するために重要です。
前のステップでは、Integer.parseInt() が失敗したときに NumberFormatException をキャッチする方法を学びました。例外をキャッチすることはエラーを処理する上で重要ですが、最初からエラーが発生しないように防ぐことがしばしば望ましいです。
このステップでは、文字列を整数として解析する 前に 検証する方法を学びます。これには、文字列が数字のみを含んでいるかどうかをチェックすることが含まれます。
これを行う方法の 1 つは、文字列の各文字を繰り返し処理し、それが数字であるかどうかをチェックすることです。もう 1 つの一般的なアプローチは正規表現を使用することですが、初心者にとっては単純なループの方が理解しやすいです。
検証チェックを含むように StringToInt.java プログラムを再度変更してみましょう。
WebIDE エディターで StringToInt.java ファイルを開きます。
既存のコードを以下のコードに置き換えます。
public class StringToInt {
public static void main(String[] args) {
String numberString = "123a"; // This string contains a non-digit character
if (isValidInteger(numberString)) {
int numberInt = Integer.parseInt(numberString);
System.out.println("The string is: " + numberString);
System.out.println("The integer is: " + numberInt);
} else {
System.out.println("Error: The string '" + numberString + "' is not a valid integer.");
}
}
// Method to check if a string is a valid integer
public static boolean isValidInteger(String str) {
if (str == null || str.isEmpty()) {
return false; // An empty or null string is not a valid integer
}
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (i == 0 && (c == '-' || c == '+')) {
// Allow a leading sign (+ or -)
continue;
}
if (!Character.isDigit(c)) {
return false; // Found a non-digit character
}
}
return true; // All characters are digits (or a leading sign)
}
}
変更点を見てみましょう。
isValidInteger(String str) という新しいメソッドを追加しました。このメソッドは文字列を入力として受け取り、その文字列が有効な整数を表す場合は true を返し、そうでない場合は false を返します。isValidInteger の中で、まず文字列が null または空であるかどうかをチェックします。Character.isDigit(c) は、文字が数字であるかどうかをチェックする Java の組み込みメソッドです。main メソッドでは、if-else 文を使用するようになりました。文字列を解析する 前に isValidInteger() を呼び出してチェックします。isValidInteger() が true を返す場合、Integer.parseInt() を実行します。false を返す場合、解析を試みることなくエラーメッセージを出力し、NumberFormatException を回避します。ファイルを保存します(Ctrl+S または Cmd+S)。
ターミナルで変更したプログラムをコンパイルします。
javac StringToInt.java
コンパイルしたプログラムを実行します。
java StringToInt
文字列 "123a" は数字以外の文字を含んでいるため、isValidInteger メソッドは false を返し、以下の出力が表示されるはずです。
Error: The string '123a' is not a valid integer.
次に、if-else 文のもう一方の分岐を見るために、文字列を有効な整数に戻してみましょう。
StringToInt.java ファイルで numberString 変数を "456" に変更します。
String numberString = "456";
ファイルを保存します。
プログラムを再度コンパイルして実行します。
javac StringToInt.java
java StringToInt
今回は、isValidInteger は true を返し、以下の出力が表示されるはずです。
The string is: 456
The integer is: 456
解析前に文字列の検証を行うことで、無効な入力をより適切に処理し、NumberFormatException のような実行時エラーを回避することができます。これは、より堅牢で信頼性の高いコードを書くための良い習慣です。
この実験では、Java で Integer.parseInt() メソッドを使用して String を int に変換する方法を学びました。Java ファイルを作成し、変換を実証するコードを記述し、プログラムをコンパイルしました。このメソッドは、様々なソースからの数値入力を処理するために不可欠です。