【Java】文字列がdouble型に変換(パース)できるか確認する3つの方法
Javaプログラミングでは、文字列がdouble型の数値として有効かどうかを確認したい場面がよくあります。たとえば、ユーザーの入力やファイルから読み込んだデータを数値として処理する前に検証しておけば、予期しない例外の発生を防ぐことができます。本記事では、parseDouble()メソッド、valueOf()メソッド、Doubleクラスのコンストラクタという3つの方法を解説します。
1. parseDouble()メソッドを使用する方法
java.lang.DoubleクラスのparseDouble()メソッドは、String型の値を受け取り、それを解析してdouble値を返します。
- nullを渡すとNullPointerExceptionがスローされます。
- 文字列をdouble値として解析できない場合、NumberFormatExceptionがスローされます。
したがって、ある文字列がdoubleに変換可能かどうかを調べるには、その文字列をparseDouble()メソッドに渡し、この処理をtry-catchブロックで囲みます。例外が発生した場合、それは与えられた文字列がdoubleとして解析できないことを意味します。
サンプルコード
import java.util.Scanner;
public class ParsableToDouble {
public static void main(String args[]) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("文字列を入力してください:");
String str = sc.next();
Double doub = Double.parseDouble(str);
System.out.println("変数の値:" + doub);
} catch (NumberFormatException ex) {
System.out.println("入力された文字列はdoubleに変換できません");
}
}
}
実行結果
文字列を入力してください: 2245g 入力された文字列はdoubleに変換できません
2. valueOf()メソッドを使用する方法
同様に、DoubleクラスのvalueOf()メソッドもString型の値を引数として受け取ります。このメソッドは余分な空白を除去した上で、文字列が表すdouble値を持つDoubleオブジェクトを返します。渡された値がdoubleとして解析できない場合、NumberFormatExceptionがスローされます。
サンプルコード
import java.util.Scanner;
public class ParsableToDouble {
public static void main(String args[]) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("文字列を入力してください:");
String str = sc.next();
Double doub = Double.valueOf(str);
System.out.println("変数の値:" + doub);
} catch (NumberFormatException ex) {
System.out.println("入力された文字列はdoubleに変換できません");
}
}
}
実行結果
文字列を入力してください: 2245g 入力された文字列はdoubleに変換できません
3. Doubleクラスのコンストラクタを使用する方法
Doubleクラスのコンストラクタの一つは、String型を引数として受け取り、指定された値をラップするDoubleオブジェクトを生成します。コンストラクタに渡された文字列がdoubleとして解析できない場合、NumberFormatExceptionがスローされます。
注意:このコンストラクタはJava 9以降で非推奨(deprecated)となっています。新しく書くコードでは、parseDouble()メソッドまたはvalueOf()メソッドの使用が推奨されます。
サンプルコード
import java.util.Scanner;
public class ParsableToDouble {
public static void main(String args[]) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("文字列を入力してください:");
String str = sc.next();
Double doub = new Double(str);
System.out.println("変数の値:" + doub);
} catch (NumberFormatException ex) {
System.out.println("入力された文字列はdoubleに変換できません");
}
}
}
実行結果
文字列を入力してください: 2245g 入力された文字列はdoubleに変換できません
まとめ:3つの方法の比較
| 方法 | 戻り値 | 備考 |
|---|---|---|
| Double.parseDouble(String) | プリミティブ型のdouble | nullを渡すとNullPointerExceptionが発生 |
| Double.valueOf(String) | Doubleオブジェクト | 前後の余分な空白を自動的にトリム |
| new Double(String) | Doubleオブジェクト | Java 9以降は非推奨 |
いずれの方法でも、変換に失敗するとNumberFormatExceptionがスローされるため、try-catchブロックで例外を捕捉することで、文字列がdoubleとして有効かどうかを安全に判定できます。単純に数値が必要な場合はparseDouble()、オブジェクトとして扱いたい場合はvalueOf()を選ぶとよいでしょう。
-
Javaでファイルやディレクトリの存在を確認する方法(NIO・従来IOの両方を解説)
Javaでファイルやディレクトリが存在するかどうかを確認する方法は、主に次の2つがあります。 1. NIOパッケージ(java.nio.file)の Files.exists メソッド 2. 従来のIOパッケージ(java.io)の File.exists メソッド この記事では、それぞれのパッケージを使った具体的なコード例を紹介します。Java 7以降を使用している場合は、より高機能で推奨されるNIO APIの利用を検討しましょう。 Java NIOでファイルの存在を確認する NIOパッケージでは、Path と Paths を使ってファイルパスを表現し、Files.exists で存在チェッ
-
Javaで文字列を比較する方法|equals()とequalsIgnoreCase()の使い分けを徹底解説
Javaで文字列の等価性を比較する際は、Stringクラスが提供するequalsメソッドまたはequalsIgnoreCaseメソッドを使用するのが基本です。この記事では、それぞれのメソッドの使い方に加えて、==演算子で文字列を比較してはいけない理由についても詳しく解説します。 equals()メソッドで文字列を比較する 2つの文字列を比較し、大文字と小文字の違いまで厳密に判定したい場合はequals()メソッドを使用します。 次のコード例では、2つのStringインスタンスが大文字小文字を含むすべての文字において一致しているかどうかを判定しています。 public class Compare