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();
- システム
エンジニア - ●●
 
- プロジェクト
マネージャー - ●●
 
JavaのintとStringの変換はプログラミングの基本
Javaのint型とString型の変換について解説しましたが、ご理解頂けましたでしょうか。Javaで数値と文字列を変換する機会はとても多いので、しっかりとマスターしましょう。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
          
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
          数多くのエンジニアが集まります。

- 
              
スマホアプリから業務系システムまで

スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
 - 
              
充実した研修制度

毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
 - 
              
資格取得を応援

スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
 - 
              
東証プライム上場企業グループ

オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
 
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
              まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

Java新着案件New Job
- 
              
              
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) - 
              
              
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) - 
              
              
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) - 
              
              
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) - 
              
              
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) - 
              
              
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)