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