はじめに
この実験では、Java で文字列が整数に変換できるかどうかをチェックする方法を学びます。これは、ユーザー入力や外部ソースからのデータを処理するための基本的なスキルです。
変換を試みるための Integer.parseInt() メソッドを探索し、NumberFormatException を使用して潜在的なエラーを処理する方法を学び、文字列を解析する前に検証するテクニックを発見し、堅牢でエラーのないコードを確保します。
Integer.parseInt() を使って解析を試す
このステップでは、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に正常に変換しました。
次のステップでは、文字列が整数に変換できない場合に何が起こるかを探索します。
NumberFormatException をキャッチする
前のステップでは、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 ファイルを作成し、変換を実証するコードを記述し、プログラムをコンパイルしました。このメソッドは、様々なソースからの数値入力を処理するために不可欠です。



