原文: Java String to Int – How to Convert a String to an Integer (Thanoshan MV)

翻訳・翻案: Yoko Matsuda

文字列 (String) オブジェクトは、ひと続きの文字 (characters) によって表されます。

Java Swing で作業したことがあれば、GUI からの入力を受け付ける際に使う JTextField や JTextArea のようなコンポーネントをご存じでしょう。これらのコンポーネントは入力を文字列として受け取ります。

例えば Swing でシンプルな電卓を作りたい場合、文字列を整数 (Integer) に変換する方法が必要です。そこでこの疑問が浮かんできます。どうすれば文字列を整数に変換できるでしょうか?

Java では、文字列を整数に変換するには Integer.valueOf()Integer.parseInt() を使用できます。

1. Integer.parseInt() を使用して文字列を整数に変換する

このメソッドは文字列を プリミティブ型の int に変換して返します。文字列が有効な整数を含まない場合は NumberFormatException が発生します。

そのため、文字列を int に変換する際には必ずコードを try-catch ブロック内に配置して、この例外を処理する必要があります。

Integer.parseInt() を使って文字列を int に変換する例を考えてみましょう。

        String str = "25";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

このコードに整数として無効な値を入力して、例外を発生させてみます。

     	String str = "25T";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number);
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

上記のコードでは 25T を整数に変換しようとしました。これは有効な入力値ではありません。したがって、NumberFormatException が発生します。

こちらが上記のコードの出力です。

java.lang.NumberFormatException: For input string: "25T"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at OOP.StringTest.main(StringTest.java:51)

次に、Integer.valueOf() メソッドを使って文字列を整数に変換する方法を考えます。

2. Integer.valueOf() を使用して文字列を整数に変換する

このメソッドは文字列を Integer オブジェクト として返します。Java のドキュメント を見ると、Integer.valueOf()new Integer(Integer.parseInt(s)) と同等の Integer オブジェクトを返すことが分かります。

このメソッドを使う際も try-catch ブロック内にコードを配置します。Integer.valueOf() メソッドを使った例を考えてみましょう。

        String str = "25";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

では、無効な整数を入力して上記のコードを壊してみましょう。

        String str = "25TA";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); 
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

前の例と同様に、このコードも例外を発生させます。

こちらが上記のコードの出力です。

java.lang.NumberFormatException: For input string: "25TA"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.valueOf(Integer.java:766)
	at OOP.StringTest.main(StringTest.java:42)

与えられた文字列が有効な数値かどうかを、上述のメソッドを使う前にチェックするためのメソッドを作成するのも良いでしょう。

下記に、渡された文字列が数値かどうかをチェックするシンプルなメソッドを作成しました。

public class StringTest {
    public static void main(String[] args) {
        String str = "25";
        String str1 = "25.06";
        System.out.println(isNumeric(str));
        System.out.println(isNumeric(str1));
    }

    private static boolean isNumeric(String str){
        return str != null && str.matches("[0-9.]+");
    }
}

出力は以下の通りです。

true
true

isNumeric() メソッドは文字列を引数にとります。そしてまず、与えられた値が null かどうかをチェックします。次に matches() メソッドを使用して、0~9 の数字とピリオドが含まれているかどうかをチェックします。

これはシンプルな数値チェックです。ユースケースに応じて、数値をチェックする更に高度な正規表現を自分で書いたり、Google で検索したりするのも良いでしょう。

整数への変換を試みる前に、与えられた文字列が数値かどうかチェックすることがベストプラクティスです。

お読みいただきありがとうございました。

画像: 🇸🇮 Janko Ferlič (Unsplash より)

Medium で筆者とつながることができます。

Happy Coding!