Javaで数値と文字列を変換する3つの方法|使い分けと実務ポイント

Mirai

Javaでintをそのまま文字列に代入したらエラーになった…どう変換すればいいの?

Zetto

型が違うものは直接代入できないんだよね。変換メソッドさえ覚えてしまえば、型エラーで詰まらなくなるよ!

この記事では、Javaの数値と文字列を相互に変換する方法を解説します。

Zettoのライタープロフィール

本記事の専門性
現役エンジニアのZettoです。Java GoldとJava Silverの資格を持ち、Javaを使ったフリーランス案件を複数経験しています。

変換の方法を知らないと、型エラーが出るたびに手が止まってしまいます。

この記事を読めば、int→String・String→intの変換方法から、実務で頻出するNumberFormatExceptionの対処法まで一通り理解できます。

ぜひ参考にしてみてください。

目次

Javaの型変換とは|intとStringを変換する前に知っておくこと

Javaの型変換とintString変換の基礎

変換メソッドを覚える前に、Javaの型のしくみを押さえておきましょう。

  • intとStringは直接代入できない|型の壁を理解しよう
  • 変換が必要になる代表的な3つの場面

それぞれ確認していきましょう。

intとStringは直接代入できない|型の壁を理解しよう

Javaは「静的型付け言語(型があらかじめ決まった言語)」です。

変数には決まった型があり、違う型をそのまま代入しようとするとコンパイルエラーになります。

たとえば、次のコードはエラーになります。

int num = 100;
String text = num; // コンパイルエラー!

イメージとしては、「整数用の箱」と「文字列用の箱」が別々に用意されているような感じです。

異なる型を代入したいときは、変換用のメソッドを通す必要があります。

Javaの変数の宣言方法や型の種類については、以下の記事で詳しく解説しています。

変換が必要になる代表的な3つの場面

型変換が必要になる場面は、主に次の3つです。

  • 数値を文字列に埋め込んで画面に表示したいとき
  • フォームやコンソールから受け取った入力値を数値として計算したいとき
  • データベースから取得した数値データを文字列として扱いたいとき

どの場面も、Javaを使ったWebアプリ開発では頻繁に出てきます。

型変換のしくみを理解しておくと、「なぜエラーが出るのか」がすぐわかるようになります。

Zetto

型のルールを最初に押さえておくだけで、コンパイルエラーへの見え方がかなり変わります。型があるおかげでバグを早期に発見できるのがJavaの強みですね。

【int → String】数値を文字列に変換する3つの方法

数値を文字列に変換する3つの方法

数値を文字列に変換する方法は3種類あります。

  • String.valueOf()で変換する(最もおすすめ)
  • Integer.toString()で変換する
  • 文字列結合(”” + 数値)で変換する
  • valueOf・toString・”+”の使い分け比較まとめ

それぞれの書き方と使いどころを押さえましょう。

String.valueOf()で変換する(最もおすすめ)

int → String の変換で最もおすすめなのがString.valueOf()です。

理由は2つあります。

  • nullを渡しても”null”という文字列に変換されるため、NullPointerExceptionが起きにくい
  • int以外にlong・double・boolean・charなど、幅広い型に対応している
int num = 100;
String text = String.valueOf(num);
System.out.println(text);                     // "100"
System.out.println(text.getClass().getName()); // java.lang.String

変換後のtextはString型なので、文字列の操作や結合が自由にできます。

変換メソッドに迷ったら、まずString.valueOf()を選んでおけば間違いありません。

Zetto

僕も実務ではString.valueOf()を使うことが多いです。null安全性が高く、コードを読む人にも「これは意図的な変換だ」と伝わりやすいのが気に入っていますね。

Integer.toString()で変換する

Integer.toString()もint → Stringの変換によく使われるメソッドです。

int num = 100;
String text = Integer.toString(num);
System.out.println(text); // "100"

Integer.toString()には、第2引数に基数(進数)を指定できる機能があります。

int num = 255;
String binary = Integer.toString(num, 2);  // 2進数
String hex    = Integer.toString(num, 16); // 16進数
System.out.println(binary); // "11111111"
System.out.println(hex);    // "ff"

16進数や2進数の文字列に変換したい場面では、Integer.toString()の出番です。

文字列結合(”” + 数値)で変換する

空文字列と数値を+で結合する方法も、変換として使えます。

int num = 100;
String text = "" + num;
System.out.println(text); // "100"

書くのは最も簡単ですが、コードを読む人に「なぜ空文字を足しているのか?」が伝わりにくいデメリットがあります。

"" + numは書くのはラクですが、初見だと意図が伝わりにくいのが課題です。

Zetto

チーム開発では読みやすさを優先してString.valueOf()を使う方が良いかなと感じています。

Javaの演算子の動作については、以下の記事で詳しく解説しています。

valueOf・toString・”+”の使い分け比較まとめ

3つの方法の違いをまとめると、以下の通りです。

方法書き方進数変換おすすめ度
String.valueOf()String.valueOf(num)★★★
Integer.toString()Integer.toString(num)★★☆
“” + 数値“” + num★☆☆

基本はString.valueOf()を使い、進数変換が必要なときだけInteger.toString()に切り替えるのがおすすめです。

int → Stringの変換方法は、この3つを押さえておけば実務でも十分対応できます。

Zetto

この3つの中で進数変換が必要になるのは、ネットワーク処理や低レベルな処理を書くときが多いですね。普通のWebアプリ開発では、String.valueOf()だけ覚えておけばほぼ事足りるかなと。

【String → int】文字列を数値に変換する方法

文字列を数値に変換する方法

今度は逆方向、String → intの変換を確認していきます。

  • Integer.parseInt()で変換する(基本の書き方)
  • Integer.valueOf()との違いと使い分け

ひとつずつ見ていきます。

Integer.parseInt()で変換する(基本の書き方)

String → intの変換で最も基本的なメソッドがInteger.parseInt()です。

String text = "100";
int num = Integer.parseInt(text);
System.out.println(num + 50); // 150

parseInt()は、数値を表す文字列を引数に受け取り、int型のプリミティブ値(オブジェクトではなく基本的な型の値)を返します。

返ってきた値はそのまま計算に使えるため、フォームの入力値を受け取って計算処理に渡す場面でよく使われます。

注意点として、数値に変換できない文字列を渡すとエラーが発生します。これは次のセクションで詳しく解説します。

Integer.valueOf()との違いと使い分け

Integer.valueOf()もString → intの変換に使えますが、parseInt()と返ってくる型が違います。

String text = "100";
int     num1 = Integer.parseInt(text);    // int型(プリミティブ)
Integer num2 = Integer.valueOf(text);     // Integer型(オブジェクト)

主な使い分けは以下の通りです。

  • 計算に使いたい場合:parseInt()(intのプリミティブ型が返るため)
  • ArrayListなどのコレクションに格納したい場合:valueOf()(Integer型が必要なため)

JavaにはオートボクシングというIntegerとintを自動変換するしくみがあります。実用上の差はほとんどないため、まずInteger.parseInt()を覚えておけば十分です。

String → intの変換はparseInt()を軸に押さえておけば、実務の大半の場面をカバーできます。

Zetto

parseInt()とvalueOf()の違いは、Java Silverの試験にも出てくる内容です。「intを返すかIntegerを返すか」という違いを軸に覚えると、混乱しにくいですね。

現場で使えるJava型変換の実践知識

現場で使えるJava型変換実践知識

変換メソッドの基本を覚えたら、実務でよく出てくる知識も押さえておきましょう。

  • 変換失敗で発生するNumberFormatException
  • long・double・floatの変換方法
  • フォーム入力値やDB取得値を変換する実務ユースケース

詳しく解説していきます。

変換失敗で発生するNumberFormatException

Integer.parseInt()やInteger.valueOf()は、変換できない文字列を渡したときNumberFormatExceptionを投げます。

NumberFormatExceptionは「例外(エラーの一種)」で、処理が強制的に中断される原因になります。

NumberFormatExceptionが起きる主な原因

NumberFormatExceptionが起きるのは、次のようなケースです。

  • 数字以外の文字が含まれている(例:”abc”、”100円”、”1,000″)
  • 空文字列を渡している(例:””)
  • 先頭や末尾にスペースが入っている(例:”100 “)
  • int型の最大値(約21億)を超えた数値(例:”3000000000″)

実際にエラーが出るコード例です。

String text = "abc";
int num = Integer.parseInt(text); // NumberFormatException発生!

try-catchで安全に変換する書き方

実務では、変換処理をtry-catchで囲んでエラーに備えます。

String input = "abc";
try {
    int num = Integer.parseInt(input);
    System.out.println("変換成功:" + num);
} catch (NumberFormatException e) {
    System.out.println("数値に変換できません:" + input);
}

try-catchは「試してみて、失敗したら別の処理をする」しくみです。

ユーザーからの入力値を変換するときは、必ずtry-catchとセットで書くようにしましょう。

Javaの例外処理については、以下の記事でtry-catchの書き方を詳しく解説しています。

Zetto

NumberFormatExceptionは、Javaを学び始めたころに絶対1度は踏むエラーですね。フォーム入力値を変換するとき、try-catchを忘れると本番でいきなりエラー画面が出て焦ることになります。早めに例外処理とセットで覚えておくのがおすすめです。

long・double・floatの変換方法

int以外の数値型も、同じしくみで変換できます。

String → 数値数値 → String
longLong.parseLong(“文字列”)String.valueOf(longValue)
doubleDouble.parseDouble(“文字列”)String.valueOf(doubleValue)
floatFloat.parseFloat(“文字列”)String.valueOf(floatValue)

使い方はintと同じです。クラス名がLong・Double・Floatに変わるだけと覚えておきましょう。

String text = "3.14";
double d = Double.parseDouble(text);
System.out.println(d + 1.0); // 4.140000000000001

doubleの計算では、小数点以下に誤差が生じることがあります。金額計算など精度が必要な場面ではBigDecimalクラスを使うのが一般的です。

フォーム入力値やDB取得値を変換する実務ユースケース

実務では、型変換が必要な場面が頻繁に出てきます。よくあるのは次の2つのケースです。

Webフォームの入力値を数値に変換して計算する

// フォームの入力値はString型で受け取る
String input = request.getParameter("price");
try {
    int price = Integer.parseInt(input);
    int total = (int)(price * 1.1); // 消費税計算
    System.out.println("合計:" + total + "円");
} catch (NumberFormatException e) {
    System.out.println("正しい金額を入力してください");
}

DBから取得した数値IDを文字列に変換してログに出力する

int userId = resultSet.getInt("user_id");
String log = "ユーザーID:" + String.valueOf(userId) + " がログインしました";
System.out.println(log);

どちらも「変換前にnullや空文字をチェックする」習慣をつけておくと、バグを未然に防げます。

変換処理はtry-catchとセットで書くことが、実務での基本の型になります。

Zetto

実際に僕もフォーム処理を書いたとき、parseInt()のtry-catchを書き忘れてリリース後に冷や汗をかいた経験があります。入力値の変換は必ず例外処理とセット、これが鉄則ですね。

Javaの数値・文字列変換の演習問題

数値文字列変換の演習問題

理解を深めるために、演習問題を3つ用意しました。

  • 演習問題1:intをStringに変換して画面出力しよう
  • 演習問題2:String型の入力値をintに変換して計算しよう
  • 演習問題3:NumberFormatExceptionをtry-catchで処理しよう

演習問題1:intをStringに変換して画面出力しよう

問題

次の変数numをString型に変換して、「数字は42です」とコンソールに出力するコードを書いてください。

int num = 42;
// ここにコードを書く

解答例

int num = 42;
String text = String.valueOf(num);
System.out.println("数字は" + text + "です");

String.valueOf(num)でintをStringに変換します。変換後のtextはString型なので、文字列結合で「数字は42です」を組み立てられます。

演習問題2:String型の入力値をintに変換して計算しよう

問題

次のString型の値をintに変換し、2倍した結果を「2倍は50です」と出力するコードを書いてください。

String input = "25";
// ここにコードを書く

解答例

String input = "25";
int num = Integer.parseInt(input);
int doubled = num * 2;
System.out.println("2倍は" + doubled + "です");

Integer.parseInt()でStringをintに変換します。変換後のnumはint型なので、そのまま掛け算が使えます。

演習問題3:NumberFormatExceptionをtry-catchで処理しよう

問題

次のコードを、NumberFormatExceptionが発生しても処理が止まらないように修正してください。

String input = "abc";
int num = Integer.parseInt(input);
System.out.println("変換結果:" + num);

解答例

String input = "abc";
try {
    int num = Integer.parseInt(input);
    System.out.println("変換結果:" + num);
} catch (NumberFormatException e) {
    System.out.println("数値に変換できない文字列です:" + input);
}

parseInt()の処理をtry{}で囲みます。”abc”は数値に変換できないため、catchブロックに処理が移ってエラーメッセージが出力されます。処理が止まらず続くのがポイントです。

演習問題3まで解けたなら、型変換の基礎はしっかり身についています。あとは実際のコードで繰り返し使うだけです。

Zetto

try-catchは最初「なんか難しそう」と感じやすいですが、実態は「失敗したときの保険」と思えばシンプルですね。演習問題3が解けたなら、Javaの型変換は実務でも通用するレベルです。

Javaの型変換をマスターして、エラーに強いコードを書こう

Java型変換をマスター、エラー対応

Javaの数値と文字列の変換について、基礎から実務まで解説しました。大事なポイントをまとめます。

  • int → String の変換はString.valueOf()を基本に使う
  • String → int の変換はInteger.parseInt()を使う
  • parseInt()でエラーが起きる場合はtry-catchで安全に処理する

型変換はJavaを使う限り、どんな現場でも必ず出てくる基礎知識です。

まずはサンプルコードを手元で動かして、自分の指で打ってみるのが一番の近道かなと。

Mirai

最初は難しそうに見えたけど、メソッドを3つ覚えるだけでよかったんだね!

Zetto

一度覚えてしまえば、あとは使うたびに自然と身についていくよ。実際に手を動かしながら使っていくのが一番だね。

Javaのメソッドの定義方法や呼び出し方についてさらに深めたい方は、以下の記事もあわせて読んでみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次