コマンドライン引数などのいくつかの機能には、扱うデータが文字列(String)のみの場合があります。
文字列では計算を行えない為、文字列から数値に変換する必要があります。
文字列から数値への変換
前述したように、文字列では計算処理に利用できません。他の言語では自動的に数値に変換するものもありますが、Javaは型に厳格な言語の為、「変換」作業を行うことによって文字列から数値へ変更する必要があります。
文字列から数値に変換する際には、変換する数値がint(整数)とdouble(小数)では記述が異なりますので注意が必要です。
Stringからintへの変換 | Ingeter.parseInt(文字列) |
---|---|
記述例 | int number = Integer.parseInt(“123”); |
Stringからdoubleへの変換 | Double.parseDouble(文字列) |
---|---|
記述例 | double number = Double.parseDouble(“10.5”); |
Integer.parseInt()やDouble.parseDouble()はSystem.out.println()と同様に、最初は呪文で覚えてもらえればと思います。
変換に利用している記述の文法や考え方は第4章のオブジェクト指向に入ってから細かく説明を行う予定です。
文字列から数値への変換 サンプルプログラム
以下のプログラムを「Number24.java」という名前でworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Number24{ public static void main(String[] args){ //引数は2つの時のみ計算を行う if(args.length == 2){ //入力された数値を変換する int num01 = Integer.parseInt(args[0]); double num02 = Double.parseDouble(args[1]); System.out.print(num01 + "x" + num02 + "="); System.out.println(num01 * num02); }else{ System.out.println("数値を2つ入力してください"); } } } |
実行例
C:\work>java Number24.java
C:\work>java Number24 5 2.5
5×2.5=12.5
C:\work>java Number24 5.0 2.5
Exception in thread “main” java.lang.NumberFormatException: For input string: “5
.0”
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Number24.main(Number24.java:6)
C:\work>java Number24 5
数値を2つ入力してください
コンパイルおよび実行例です。実行は3回行っています。
Number24.javaの補足
Number24では以下のように引数の最初(0番目)に小数を入力して実行すると実行時エラーとなります。
Exception in thread “main” java.lang.NumberFormatException: For input string: “5
.0”
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Number24.main(Number24.java:6)
これは最初の引数(引数0)はint型への変換を行っているため、小数を入力すると変換時にエラーとなります。
また、以下のように引数を2つ以外で入力すると、if文での条件(引数の数が2つ)に当てはまらないため、メッセージが表示されるようになっています。
数値を2つ入力してください
if(args.length == 2)
上記の条件に当てはまらないため、elseブロックでの表示が行われます。
文字列から数値への変換 復習問題
- 以下の説明で誤っている記述を選んでください。
- 以下の中から実行時エラーやコンパイルエラーが発生する記述を選んでください。
- 以下の中から実行時エラーやコンパイルエラーが発生する記述を選んでください。
- お疲れ様でした。
-
- 文字列から数値への変換はキャストで行うことができない
- 数値から文字列への変換はキャストで行うことができない
- Integer.parseInt(文字列)の記述ではint型をString型へ変換することができる
- Double.parseDouble(文字列)の記述ではString型をDouble型へ変換することができる
-
Integer.parseInt("10.0")
Integer.parseInt("10")
-
String str = "5";
Integer.parseInt(str); -
String str = "-5";
Integer.parseInt(str);
-
Double.parseDouble("10.0")
Double.parseDouble("10")
-
String str = "5" + "2";
Double.parseDouble(str); -
String str = "-5" + "-4";
Double.parseDouble(str);
まとめ
- 文字列から数値へ変換するには型変換ではなく変換処理が必要
- Integer.parseInt(文字列)でint型への変換
- Double.parseDouble(文字列)でdouble型への変換