閉じる

Javaで数値と文字列を相互変換する方法|基本から効率的なやり方まで紹介

Javaプログラミングにおいて、数値と文字列の相互変換は避けて通れない基本的な操作の一つです。

ユーザー入力を計算可能な数値に変換したり、計算結果を画面や帳票に出力するために文字列へ整形したりする場面は、業務アプリケーション開発で頻繁に登場します。

2026年現在のJava開発においても、標準ライブラリを活用した安全で効率的な変換手法を理解しておくことは非常に重要です。

本記事では、Javaにおける数値から文字列、および文字列から数値への変換方法について、実務で役立つ具体的なコード例を交えて詳しく紹介します。

初心者から中級者までが活用できる、最適な実装パターンを身に付けていきましょう。

数値から文字列へ変換する主な方法

Javaで数値を文字列に変換する方法は複数存在しており、用途に応じて最適なものを選ぶ必要があります。

最も一般的で推奨される方法は、String.valueOf()メソッドを使用することです。

このメソッドは、int型やdouble型、boolean型など、あらゆる基本データ型を引数に取ることができ、適切な文字列形式に変換してくれます。

また、内部的に各ラッパークラスのtoString()メソッドを呼び出しているため、コードの可読性と一貫性を保つのに役立ちます。

String.valueOf() を使用した基本変換

まずは、最もシンプルで汎用性の高いString.valueOf()の使い方を見てみましょう。

Java
public class NumberToString {
    public static void main(String[] args) {
        int targetInt = 2026;
        double targetDouble = 123.45;

        // int型を文字列に変換
        String strInt = String.valueOf(targetInt);
        // double型を文字列に変換
        String strDouble = String.valueOf(targetDouble);

        System.out.println("intからの変換: " + strInt);
        System.out.println("doubleからの変換: " + strDouble);
    }
}
実行結果
intからの変換: 2026
doubleからの変換: 123.45

このように、データ型を問わず同じメソッド名で変換できる点が大きなメリットです。

ラッパークラスの toString() メソッド

特定の型であることが明らかな場合は、Integer.toString()Double.toString()といったラッパークラス固有のメソッドを使用することも可能です。

String.valueOf()と動作上の大きな違いはありませんが、特定の型に特化した処理であることを明示したい場合に適しています。

ただし、プリミティブ型ではなくオブジェクト(Integer型など)を扱う場合、対象がnullであればNullPointerExceptionが発生する可能性がある点に注意が必要です。

String.format() による書式指定変換

数値を単に文字列にするだけでなく、桁数を揃えたり、カンマ区切りにしたりする場合は、String.format()メソッドが非常に便利です。

例えば、金額を表示する際に「1,000,000」のようにカンマを入れたり、IDを「0001」のようにゼロ埋め(パディング)したりする処理が容易に行えます。

Java
public class FormatExample {
    public static void main(String[] args) {
        int price = 50000;
        int id = 7;

        // カンマ区切り
        String formattedPrice = String.format("%,d円", price);
        // 4桁でゼロ埋め
        String formattedId = String.format("%04d", id);

        System.out.println("整形後の価格: " + formattedPrice);
        System.out.println("整形後のID: " + formattedId);
    }
}
実行結果
整形後の価格: 50,000円
整形後のID: 0007

このように、表示形式を厳密に制御したい場合にはString.format()が最適です。

文字列から数値へ変換する主な方法

外部から入力された文字列を数値として扱うためには、解析(パース)処理が必要です。

Javaでは、各数値型のラッパークラスに用意されているparse...メソッドを使用するのが一般的です。

Integer.parseInt() による整数変換

文字列をint型に変換する際には、Integer.parseInt()を頻繁に利用します。

このメソッドは、引数として渡された文字列が有効な整数形式でない場合、NumberFormatExceptionという例外をスローします。

Java
public class StringToNumber {
    public static void main(String[] args) {
        String numericStr = "1024";

        try {
            int result = Integer.parseInt(numericStr);
            System.out.println("変換結果: " + result);
        } catch (NumberFormatException e) {
            System.out.println("数値として解析できませんでした。");
        }
    }
}
実行結果
変換結果: 1024

文字列が数値以外の文字を含んでいたり、空文字であったりする場合に備えて、必ず例外処理(try-catch)を検討してください。

Double.parseDouble() による浮動小数点数への変換

小数を扱う場合は、Double.parseDouble()を使用します。

基本的な使い方はparseIntと同様ですが、指数表記(1.23E2など)も解釈できる点が特徴です。

valueOf() と parse…() の違い

JavaにはInteger.valueOf()というメソッドも存在します。

Integer.parseInt()がプリミティブ型のintを返すのに対し、Integer.valueOf()はラッパークラスであるIntegerオブジェクトを返します。

2026年現在の開発でも、オートボクシング機能により多くの場合で意識せずに使い分けが可能ですが、メモリ効率や特定のコレクション(Listなど)での使用を考慮して選択することが推奨されます。

数値変換における高度なテクニックと注意点

基本操作を理解した後は、実務で遭遇する特殊なケースへの対応方法を学びましょう。

特に、大規模な数値を扱う場合や、ユーザーの国籍(ロケール)に合わせた表示が必要な場合には、専用のクラスが必要になります。

DecimalFormat による複雑な書式設定

String.format()よりも詳細なカスタマイズが必要な場合は、java.text.DecimalFormatクラスが力を発揮します。

小数点以下の桁数を固定したり、パーセント表記を行ったりするパターンを定義できます。

Java
import java.text.DecimalFormat;

public class DecimalFormatExample {
    public static void main(String[] args) {
        double value = 0.123456;
        
        // 小数点第2位まで、パーセント表示
        DecimalFormat df = new DecimalFormat("##.##%");
        String result = df.format(value);

        System.out.println("変換結果: " + result);
    }
}
実行結果
変換結果: 12.35%

このように、ビジネスロジックで求められる独自のフォーマットを簡単に実装できます。

BigInteger と BigDecimal の変換

非常に大きな整数を扱うBigIntegerや、金融計算などで精度の高い小数を扱うBigDecimalも、文字列との相互変換が欠かせません。

これらのクラスは、コンストラクタに文字列を渡すことでインスタンスを生成します。

計算精度を重視する場合は、double型ではなくBigDecimalを使用するのがJavaの定石です。

Java
import java.math.BigDecimal;

public class BigDecimalExample {
    public static void main(String[] args) {
        String priceStr = "1980.50";
        
        // 文字列からBigDecimalへ
        BigDecimal price = new BigDecimal(priceStr);
        
        // BigDecimalから文字列へ
        String output = price.toPlainString();

        System.out.println("BigDecimal値: " + output);
    }
}
実行結果
BigDecimal値: 1980.50

toString()メソッドではなく、toPlainString()を使用することで、指数表記を避けてありのままの数値を文字列として取得できます。

2026年のJavaにおける最新動向:String Templates

Javaのバージョンアップに伴い、文字列操作の利便性は向上し続けています。

Java 21以降で導入されたString Templates(文字列テンプレート)は、数値を含む文字列の構築をより直感的にしました。

従来の「+」演算子による連結やStringBuilderを多用しなくても、変数を直接埋め込むことが可能です。

Java
public class ModernConversion {
    public static void main(String[] args) {
        int year = 2026;
        String message = STR."今年は \{year} 年です。";
        System.out.println(message);
    }
}

この記述方法は、内部的に安全かつ効率的な変換処理が行われるため、今後のJava開発における標準的なスタイルとなるでしょう。

パフォーマンスに関する考慮事項

大量のデータを一括で変換する場合、パフォーマンスへの影響を考慮する必要があります。

例えば、ループ内で文字列連結を行う際に「+」演算子を使いすぎると、一時的なStringオブジェクトが大量に生成され、ガベージコレクション(GC)の負荷が高まります。

そのようなケースでは、StringBuilderStringBufferを使用して、効率的に文字列を構築するのが賢明です。

また、数値変換時の例外発生は比較的「重い」処理であるため、事前に正規表現などで数値であるかチェックし、例外の発生頻度を下げる工夫も大規模システムでは有効です。

よくあるエラーと回避策

数値・文字列変換で最も多いトラブルは、想定外の入力による例外です。

特に以下の点に注意してください。

エラーの状況原因対策
NumberFormatException数値として解釈できない文字が含まれているtry-catchでの捕捉、または事前バリデーションを行う
NullPointerExceptionnullオブジェクトに対してtoString()を実行したString.valueOf()を使用するか、nullチェックを入れる
意図しない丸め誤差double型へ変換した際に浮動小数点の計算誤差が生じた厳密な計算にはBigDecimalクラスを使用する

こうした基本的なミスを防ぐことで、堅牢なプログラムを作成することができます。

まとめ

Javaにおける数値と文字列の変換は、言語の基本でありながら非常に奥の深いテーマです。

String.valueOf()Integer.parseInt()といった基本的なメソッドを確実に使いこなすことが、開発の第一歩となります。

また、要件に応じてString.format()DecimalFormatを使い分け、適切な書式でデータを出力するスキルも欠かせません。

2026年以降のモダンなJava開発では、新しい言語仕様であるString Templatesなどの活用も視野に入れ、よりシンプルで読みやすいコードを目指しましょう。

本記事で紹介した手法を適切に選択することで、エラーが少なく保守性の高いJavaアプリケーションを構築できるはずです。

URLをコピーしました!