Javaコラム Javaエンジニアのためのお役立ちコラム

JavaのintとStringの変換について解説!

2020年10月27日
SE
Javaで使われることが多いクラス型intとStringの変換について知りたいです。
PM
JavaでintとStringを相互に変換する方法などを解説しますので、一緒に学んでいきましょう。

JavaのintとStringとは?


Javaのintは数値型で、プリミティブ型と言われます。-2,147,483,648から2,147,483,647までの範囲を表すことができて、Javaで最も多く使われる数値型と言えます。以下のように利用します。

int val = 100;
int val2 = val + 200;

Stringは文字列のクラス名で、参照型です。これもJavaで最も多く使われるクラス型と言えるでしょう。以下のように利用します。

String str = “”文字列です。””;
String str2 = str + “”追加もできます。””;

この記事ではJavaでintとStringを相互に変換する方法などを解説します。

int型の数値の文字列への変換

int型の数値の文字列への変換はStringクラスのvalueOfメソッドで行います。

int val = 123;
String val_str = String.valueOf(val);

IntegerクラスのtoStringメソッドを使う方法もあります。

int val = 123;
String val_str = Integer.toString(val);

それ以外では、空の文字列に付け加える方法もあります。

int val = 123;
String val_str = “””” + val;

どれでも好きなやり方で行って構いません。

文字列をint型の数値に変換

では逆に、文字列をint型の数値に変換するにはどうしたらよいのでしょうか。まずIntegerクラスのparseIntを使う方法があります。

String val_str = “”123″”;
int val = Integer.parseInt(val_str);

それ以外では、上で使用したIntegerクラスのvalueOfで文字列からint型への変換もできます。

String val_str = “”123″”;
int val = Integer.valueOf(val_str);

IntegerのvalueOfがintにもStringにも対応できるのは、Javaのオーバーロードという機能を使っているからです。これ1つ覚えれば相互変換ができるので便利です。

文字列が正しく数値に変換できなかった場合

文字列を数値にする場合、文字列が正しい数値ではなかったらどうなるのでしょうか。

String val_str = “”あいう””;
int val = Integer.valueOf(val_str);

これを実行すると、NumberFormatExceptionが発生して異常終了します。これを防ぐには、以下のようにtry~catchで囲みましょう。

try {
String val_str = “”あいう””;
int val = Integer.valueOf(val_str);
} catch (NumberFormatException e) {
e.printStackTrace();
}

正規表現でチェックするサンプル

文字列が数値として正しいか事前にチェックしたい場合は、正規表現を使います。以下のJavaサンプルをご覧ください。なお実行する時はソースの先頭に「import java.util.regex.*;」を追加してください。

String str = “”12345″”;
String reg = “”^-?[0-9]*$””;
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);

if (m.find()) {
System.out.println(Integer.valueOf(str));
}

正規表現で文字列の数値判定ができる

“”^-?[0-9]*$””という不思議な文字列によって、対象の文字列が数値かどうかを判定しています。^は先頭か、-?はマイナスが0個か1個か、[0-9]*は0から9が繰り返されるか、$は末尾か、という意味です。文字列が-と0~9だけで構成されているか、ということです。

正規表現は非常に機能が豊富で、あらゆる文字列のパターンマッチングができます。興味があれば是非調べてみてください。

16進数の文字列変換は?

なおint型は10進数だけでなく16進数も使えます。16進数とは9の次が10ではなくAになり、B、C、D、E、Fと続き、その次が10になります。int型に代入する時は先頭に0xを付けて以下のようにします。大文字・小文字の区別はありません。

int hex = 0xabc;

ところが以下のように16進数の文字列を変換しようとすると、NumberFormatExceptionになってしまいます。どうしたら変換できるのでしょうか。

String val_str = “”0xabc””;
int val = Integer.valueOf(val_str);

Integer.decodeを活用しよう

正解はInteger.decodeを使用します。以下のJavaサンプルを実行すると、

String val_str = “”0xabc””;
int val = Integer.decode(val_str);
System.out.println(val);

以下が表示されます。

2748

Integer.decodeは10進数にも使えるので、valueOfよりこちらを使うのも良いでしょう。なおint型の数値を16進数文字列にするには以下のようにします。

String hex_str = String.format(“”0x%03x””, Integer.valueOf(2748));
System.out.println(hex_str);

実行結果は以下になります。

0xabc

Integerクラスはインスタンスを持てる

ここまでIntegerというクラスで変換をしてきましたが、このIntegerというクラスはインスタンスを持つことができます。以下のようにすれば123という数値を持つインスタンスを生成できます。

Integer iObj = Integer.valueOf(123);

Integerクラスは数値をラップしたインスタンスを作ることが出来るのです。int型の変数にない長所としては、まずnullにすることができます。int型の変数の場合、0や-1と言う数値にも意味があるので「中身が無い」と言う状態にできません。

Integer型ならばnullを入れれば「中身が無い」と言う状態にすることができます。プログラムにおいて、未初期化の状態と0が入っている状態は区別したいことが多いのです。

Integerクラスならコレクションが使える

Integerクラスのインスタンスのもう一つの利点は、クラスであるためコレクションで使用できることです。以下のようにList型の要素として扱うことができます。int型の変数は配列変数が使えますが、List型にあるような便利な機能は配列にはありません。

List<Integer> list = new ArrayList<>();
list.add(Integer.valueOf(100));
list.add(Integer.valueOf(200));
list.add(Integer.valueOf(300));
list.forEach(System.out::println);

なお上のJavaサンプルを利用する場合は先頭に「import java.util.*;」を追加してください。実行結果は以下になります。

100
200
300

Integerインスタンスの変換

Integerクラスのインスタンスは数値文字列でも生成することができます。

Integer iObj = Integer.valueOf(“”123″”);

Integerクラスのインスタンスをint型の変数に戻すには、以下のようにします。

Integer iObj = Integer.valueOf(123);
int i = iObj.intValue();

文字列にするには以下のようにします。

Integer iObj = Integer.valueOf(123);
String str = iObj.toString();

SE
JaveのintとStringの変換方法は一つではないのですね。
PM
一緒にプラグラムを組んだ人が自分のやり方と違った場合に困らないように、この機会にしっかりと理解しておきましょう。

JavaのintとStringの変換はプログラミングの基本

Javaのint型とString型の変換について解説しましたが、ご理解頂けましたでしょうか。Javaで数値と文字列を変換する機会はとても多いので、しっかりとマスターしましょう。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)