文字列から数値への変換

広告

数値形式の文字列を数値そのものに変換する方法を確認します。変換する方法は3つあります。順に確認していきます。

parsexxxメソッドを使用する

1つ目の方法は各ラッパークラスで用意されているparsexxxメソッドを使う方法です。xxxの部分はラッパークラス毎に異なりそれぞれ次のようなメソッドが用意されています。

Byteクラス:
static byte parseByte(String s)

Shortクラス:
static short parseShort(String s)

Integerクラス:
static int parseInt(String s)

Longクラス:
static long parseLong(String s)

Floatクラス:
static float parseFloat(String s)

Doubleクラス:
static double parseDouble(String s)

例えばIntegerクラスで用意されているparseIntメソッドは、引数に指定された文字列を整数の値として解析しint型の値として返します。実際には次のように記述します。

String str = "124";
int i = Integer.parseInt(str);

なお整数でない数値の文字列をparseIntメソッドを使って変換しようとしたり、そもそも数値形式でない文字列を変換しようとすると、コンパイルエラーとはなりませんが実行時に「java.lang.NumberFormatException: For input string」というエラーが発生します。例えば次のような場合です。

String str = "124.567";
int i = Integer.parseInt(str);

また範囲を超えた数値の文字列を変換しようとすると、コンパイルエラーとはなりませんが実行時に「java.lang.NumberFormatException: Value out of range」というエラーが発生します。例えば次のような場合です。

String str = "198667234";
byte b = Byte.parseByte(str);

いずれの場合もコンパイル時にはエラーとなりませんので注意して下さい。

valueOfメソッドを使用する

2つ目の方法は各ラッパークラスで用意されているvalueOfメソッドを使用する方法です。各クラス毎に戻り値が異なる次のようなメソッドが用意されています。

Byteクラス:
static Byte valueOf(String s)

Shortクラス:
static Short valueOf(String s)

Integerクラス:
static Integer valueOf(String s)

Longクラス:
static Long valueOf(String s)

Floatクラス:
static Float valueOf(String s)

Doubleクラス:
static Double valueOf(String s)

例えばIntegerクラスで用意されているvalueOfメソッドは、引数に指定された文字列が表す整数の値を持つIntegerクラスのオブジェクトを返します。実際には次のように記述します。

String str = "124";
Integer oi = Integer.valueOf(str);

なお基本データ型の値ではなく対応するラッパークラスのオブジェクトを返す点に注意して下さい。

また数値形式でない文字列を指定したり、範囲を超えた数値形式の文字列を指定した場合には先ほどと同じように実行時エラーが発生します。

コンストラクタを使用する

3つ目の方法はラッパークラスのコンストラクタの引数に文字列を指定する方法です。

Byteクラス:
Byte(String s)

Shortクラス:
Short(String s)

Integerクラス:
Integer(String s)

Longクラス:
Long(String s)

Floatクラス:
Float(String s)

Doubleクラス:
Double(String s)

例えばIntegerクラスのオブジェクトを作成する時に火異数として文字列を指定すると、引数に指定された文字列が表す整数の値を持つIntegerクラスのオブジェクトを作成します。実際には次のように記述します。

String str = "124";
Integer oi = new Integer(str);

数値形式でない文字列を指定したり、範囲を超えた数値形式の文字列を指定した場合には先ほどと同じように実行時エラーが発生します。

サンプル

では簡単な例で試しておきます。

JSample5_1.java

class JSample5_1{
  public static void main(String args[]){
    String str1 = "124";
    String str2 = "73";
    String str3 = "4.987";

    int i = Integer.parseInt(str1);
    Byte ob = new Byte(str2);
    Double od = Double.valueOf(str3);

    System.out.println(i);
    System.out.println(ob.byteValue());
    System.out.println(od.doubleValue());
  }
}

コンパイル後に実行すると次のように表示されます。

p5-1

( Written by Tatsuo Ikura )