Java : 文字列と数値の変換
文字列と数値の変換方法のまとめです。
10進数だけでなく16進数、2進数、0埋め、浮動小数点など、いろいろなパターンを具体例多めにご紹介します。
簡単なまとめ
本記事では、書式文字列には Java 15 で追加された String.formatted を使っています。
Java 15 より前のバージョンでは String.format をご使用ください。
// Java 15 以降
final String str1 = "%d".formatted(123);
System.out.println(str1); // "123"
// Java 15 より前
final String str2 = String.format("%d", 123);
System.out.println(str2); // "123"
整数
進数 | 変換 | 書式 | 使用例 |
---|---|---|---|
10進数 | 文字列 → 数値 |
|
|
数値 → 文字列 |
|
||
桁指定 |
|
||
0埋め |
|
||
+記号あり |
|
||
16進数 | 文字列 → 数値 |
|
|
数値 → 文字列 |
|
||
桁指定 |
|
||
0埋め |
|
||
2進数 | 文字列 → 数値 |
|
|
数値 → 文字列 |
|
補足
実数
変換 | 書式 | 使用例 | |
---|---|---|---|
文字列 → 数値 | 小数表記 |
|
|
浮動小数点表記 |
|
||
数値 → 文字列 |
|
||
小数表記 |
|
||
桁指定(全体) |
|
||
桁指定(小数部) |
|
||
浮動小数点表記 |
|
||
桁指定(全体) |
|
||
桁指定(小数部) |
|
整数(10進数)
文字列 → 数値
変換には Integer.parseInt(String s) を使います。
// 基本形
final int value1 = Integer.parseInt("1234");
System.out.println(value1); // 1234
// プラス記号をつけてもOK
final int value2 = Integer.parseInt("+5678");
System.out.println(value2); // 5678
// マイナス記号をつけると負数になります。
final int value3 = Integer.parseInt("-1234");
System.out.println(value3); // -1234
// 先頭が0で埋まっていても解析してくれます。
final int value4 = Integer.parseInt("00001234");
System.out.println(value4); // 1234
int の範囲は Integer.MAX~Integer.MIN です。
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648
変換元の文字列はこの範囲内におさまるようにしましょう。
範囲外になると非チェック例外の NumberFormatException が発生します。
// OK
final int value = Integer.parseInt("2147483647");
System.out.println(value); // 2147483647
// NumberFormatException が発生。
Integer.parseInt("2147483648");
// OK
final int value = Integer.parseInt("-2147483648");
System.out.println(value); // -2147483648
// NumberFormatException が発生。
Integer.parseInt("-2147483649");
10進数で許容されていない文字を使った場合も NumberFormatException が発生します。
// NumberFormatException が発生。
Integer.parseInt("xyz");
// NumberFormatException が発生。
Integer.parseInt("0x1234");
数値 → 文字列
基本形
Integer.toString(int i) を使って変換します。
final String str1 = Integer.toString(1234);
System.out.println(str1); // "1234"
final String str2 = Integer.toString(-5678);
System.out.println(str2); // "-5678"
桁を指定
桁を指定するには書式文字列を使います。
書式文字列は "%桁数d" とします。
// 10桁で変換します。桁が足りない場合は空白で埋まります。
final String str1 = "%10d".formatted(1234);
System.out.println(str1); // " 1234"
System.out.println(str1.length()); // 10
// 8桁で変換します。マイナス記号も桁に含まれます。
final String str2 = "%8d".formatted(-5678);
System.out.println(str2); // " -5678"
System.out.println(str2.length()); // 8
// 2桁を指定しています。しかし、数値は4桁になるので、そのまま4桁で変換されます。
// (切り捨てられたりはしません)
final String str3 = "%2d".formatted(1234);
System.out.println(str3); // "1234"
System.out.println(str3.length()); // 4
0埋め
桁を指定して足りない部分を0で埋めます。
書式文字列は "%0桁数d" とします。
// 10桁で変換します。桁が足りない場合は0で埋まります。
final String str1 = "%010d".formatted(1234);
System.out.println(str1); // "0000001234"
// 8桁で変換します。マイナス記号も桁に含まれます。
final String str2 = "%08d".formatted(-5678);
System.out.println(str2); // "-0005678"
プラス記号あり
常にプラスかマイナス記号をつけます。
書式文字列は "%+d" とします。
// 正数の場合にプラス記号をつけます。
final String str1 = "%+d".formatted(1234);
System.out.println(str1); // "+1234"
// 負数にはマイナス記号がつきます。
final String str2 = "%+d".formatted(-5678);
System.out.println(str2); // "-5678"
整数(16進数)
文字列 → 数値
Integer.parseInt(String s, int radix) を使って変換します。
基数(radix)に16を指定します。
文字列の最初に"0x"は不要です。つけると NumberFormatException が発生します。
// 基本形
final int value1 = Integer.parseInt("12ab", 16);
System.out.println(value1); // 4779
System.out.println(Integer.toHexString(value1)); // "12ab"
// プラス記号をつけてもOK
final int value2 = Integer.parseInt("+34ef", 16);
System.out.println(value2); // 13551
System.out.println(Integer.toHexString(value2)); // "34ef"
// マイナス記号をつけると負数になります。
final int value3 = Integer.parseInt("-12ab", 16);
System.out.println(value3); // -4779
// ※toHexStringは符号なし文字列に変換します。
System.out.println(Integer.toHexString(value3)); // "ffffed55"
// 先頭が0で埋まっていても解析してくれます。
final int value4 = Integer.parseInt("000012ab", 16);
System.out.println(value4); // 4779
System.out.println(Integer.toHexString(value4)); // "12ab"
// 先頭に"0x"は不要です。
// NumberFormatException が発生。
Integer.parseInt("0x12ab", 16);
もしくは Integer.decode(String nm) を使います。
こちらは、16進数以外にも10進数や8進数も解析できます。
// decodeの場合は先頭に"0x"が必要です。
final int value1 = Integer.decode("0x12ab");
System.out.println(value1); // 4779
System.out.println(Integer.toHexString(value1)); // "12ab"
// または"#"でもOKです。
final int value2 = Integer.decode("#12ab");
System.out.println(value2); // 4779
System.out.println(Integer.toHexString(value2)); // "12ab"
// プラス記号をつけてもOK
final int value3 = Integer.decode("+0x45cd");
System.out.println(value3); // 17869
System.out.println(Integer.toHexString(value3)); // "45cd"
// マイナス記号をつけると負数になります。
final int value4 = Integer.decode("-0x45cd");
System.out.println(value4); // -17869
// ※toHexStringは符号なし文字列に変換します。
System.out.println(Integer.toHexString(value4)); // "ffffba33"
// "0x"の後に0で埋まっていても解析してくれます。
final int value5 = Integer.decode("0x00000abc");
System.out.println(value5); // 2748
System.out.println(Integer.toHexString(value5)); // "abc"
数値 → 文字列
基本形
Integer.toHexString(int i) を使って変換します。
注意点としては、符号なし整数となることです。
// 基本形
final String str1 = Integer.toHexString(0x12ab);
System.out.println(str1); // "12ab"
// 大文字にしたい場合はString.toUpperCaseを使います。
System.out.println(str1.toUpperCase()); // "12AB"
// 負数は符号なしで変換されます。
final String str2 = Integer.toHexString(-0x12ab);
System.out.println(str2); // "ffffed55"
桁を指定
桁を指定するには書式文字列を使います。
書式文字列は "%桁数x" とします。
// 6桁で変換します。桁が足りない場合は空白で埋まります。
final String str1 = "%6x".formatted(0x12ab);
System.out.println(str1); // " 12ab"
System.out.println(str1.length()); // 6
// 書式文字列のxを大文字にすると結果も大文字になります。
final String str2 = "%6X".formatted(0x12ab);
System.out.println(str2); // " 12AB"
System.out.println(str2.length()); // 6
// 12桁で変換します。負数は符号なしとなります。
final String str3 = "%12x".formatted(-0x34cd);
System.out.println(str3); // " ffffcb33"
System.out.println(str3.length()); // 12
// 2桁を指定しています。しかし、数値は4桁になるので、そのまま4桁で変換されます。
// (切り捨てられたりはしません)
final String str4 = "%2x".formatted(0x12ab);
System.out.println(str4); // "12ab"
System.out.println(str4.length()); // 4
0埋め
桁を指定して足りない部分を0で埋めます。
書式文字列は "%0桁数x" とします。
// 6桁で変換します。桁が足りない場合は0で埋まります。
final String str1 = "%06x".formatted(0x12ab);
System.out.println(str1); // "0012ab"
// 書式文字列のxを大文字にすると結果も大文字になります。
final String str2 = "%06X".formatted(0x12ab);
System.out.println(str2); // "0012AB"
// 12桁で変換します。負数は符号なしとなります。
final String str3 = "%012x".formatted(-0x34cd);
System.out.println(str3); // "0000ffffcb33"
使用できない書式
16進数では符号ありの書式文字列 "%+x" は使えません。
// FormatFlagsConversionMismatchException: Conversion = x, Flags = + が発生。
final String str1 = "%+x".formatted(0x12ab);
整数(2進数)
文字列 → 数値
Integer.parseInt(String s, int radix) を使って変換します。
基数(radix)に2を指定します。
// 基本形
final int value1 = Integer.parseInt("1110", 2);
System.out.println(value1); // 14
System.out.println(Integer.toBinaryString(value1)); // "1110"
// プラス記号をつけてもOK
final int value2 = Integer.parseInt("+1111", 2);
System.out.println(value2); // 15
System.out.println(Integer.toBinaryString(value2)); // "1111"
// マイナス記号をつけると負数になります。
final int value3 = Integer.parseInt("-1111", 2);
System.out.println(value3); // -15
// ※toBinaryStringは符号なし文字列に変換します。
System.out.println(Integer.toBinaryString(value3)); // "11111111111111111111111111110001"
// 先頭が0で埋まっていても解析してくれます。
final int value4 = Integer.parseInt("00001010", 2);
System.out.println(value4); // 10
System.out.println(Integer.toBinaryString(value4)); // "1010"
数値 → 文字列
Integer.toBinaryString(int i) を使って変換します。
注意点としては、符号なし整数となることです。
// 基本形
final String str1 = Integer.toBinaryString(0x01);
System.out.println(str1); // "1"
final String str2 = Integer.toBinaryString(0x0f);
System.out.println(str2); // "1111"
final String str3 = Integer.toBinaryString(0xf0);
System.out.println(str3); // "11110000"
// 負数は符号なしとして表現されます。
final String str4 = Integer.toBinaryString(-0x0f);
System.out.println(str4); // "11111111111111111111111111110001"
使用できない書式
10進数、16進数で使えた書式文字列による変換は、2進数では使えません。
浮動小数点
文字列 → 数値
小数表記
Double.parseDouble(String s) を使って変換します。
// 基本形
final double value1 = Double.parseDouble("12.345");
System.out.println(value1); // 12.345
// 整数部が0の場合は省略可能です。
final double value2 = Double.parseDouble(".123");
System.out.println(value2); // 0.123
// プラス記号をつけてもOK
final double value3 = Double.parseDouble("+12.067");
System.out.println(value3); // 12.067
// マイナス記号をつけてもOK
final double value4 = Double.parseDouble("-34.789");
System.out.println(value4); // -34.789
// 先頭が0で埋まっていても解析してくれます。
final double value5 = Double.parseDouble("0000012.345");
System.out.println(value5); // 12.345
特殊な値も変換できます。
// 非数
final double value1 = Double.parseDouble("NaN");
System.out.println(value1); // "NaN"
// プラス無限量
final double value2 = Double.parseDouble("Infinity");
System.out.println(value2); // "Infinity"
// マイナス無限量
final double value3 = Double.parseDouble("-Infinity");
System.out.println(value3); // "-Infinity"
浮動小数点表記
浮動小数点表記も Double.parseDouble(String s) を使って変換します。
final double value1 = Double.parseDouble("1.2345e+1");
System.out.println(value1); // 12.345
final double value2 = Double.parseDouble("1.2345e-2");
System.out.println(value2); // 0.012345
final double value3 = Double.parseDouble("123.45e+10");
System.out.println(value3); // 1.2345E12
数値 → 文字列
基本形
Double.toString(double d) で変換します。
数値の絶対値がとても大きい(107以上)、もしくはとても小さい(10-3未満) 場合は、浮動小数点表記で変換されます。
それ以外は小数表記となります。
// 小数表記
final String str1 = Double.toString(12.345);
System.out.println(str1); // "12.345"
final String str2 = Double.toString(-34.567);
System.out.println(str2); // "-34.567"
// 浮動小数点表記
final String str3 = Double.toString(123456789);
System.out.println(str3); // "1.23456789E8"
final String str4 = Double.toString(0.0001234);
System.out.println(str4); // "1.234E-4"
小数表記
書式文字列 "%f" で変換します。
桁数が大きい場合でも必ず小数表記となります。
// デフォルトでは小数点以下を6桁で変換します。
final String str1 = "%f".formatted(12.345);
System.out.println(str1); // "12.345000"
final String str2 = "%f".formatted(1.234e+10);
System.out.println(str2); // "12340000000.000000"
final String str3 = "%f".formatted(1.234e-3);
System.out.println(str3); // "0.001234"
小数部の桁を指定するには、書式文字列 "%.桁数f" で変換します。(%の後ろにピリオドが入ります)
// 小数点以下を1桁に指定します。
final String str1 = "%.1f".formatted(1.2345);
System.out.println(str1); // "1.2"
// 小数点以下を2桁に指定します。
final String str2 = "%.2f".formatted(-1.2345);
System.out.println(str2); // "-1.23"
// 小数点以下を10桁に指定します。足りない分は0で埋まります。
final String str3 = "%.10f".formatted(1.234e-5);
System.out.println(str3); // "0.0000123400"
全体の桁を指定するには、書式文字列 "%全体桁数f" で変換します。
小数部の桁も合わせて指定する場合は "%全体桁数.小数部桁数f" とします。
// 全体の桁数を10桁に指定します。
// 小数点やマイナス記号といったものも含みます。
// 足りない分は空白で埋まります。
final String str1 = "%10f".formatted(-1.234);
System.out.println(str1); // " -1.234000"
System.out.println(str1.length()); // 10
// 全体の桁数を5桁で指定しています。
// しかし、小数部がデフォルトで6桁なので結果として5桁以上になります。
final String str2 = "%5f".formatted(1.234);
System.out.println(str2); // "1.234000"
// 小数部も指定します。
final String str3 = "%6.2f".formatted(1.234);
System.out.println(str3); // " 1.23"
System.out.println(str3.length()); // 6
浮動小数点表記
書式文字列 "%e" で変換します。
桁数が小さい場合でも必ず浮動小数点表記となります。
// デフォルトでは小数点以下を6桁で変換します。
final String str1 = "%e".formatted(1.2345);
System.out.println(str1); // "1.234500e+00"
final String str2 = "%e".formatted(-12345.0);
System.out.println(str2); // "-1.234500e+04"
final String str3 = "%e".formatted(1.234e-5);
System.out.println(str3); // "1.234000e-05"
// 大文字の"E"とすると結果も大文字になります。
final String str4 = "%E".formatted(1.234e-5);
System.out.println(str4); // "1.234000E-05"
小数部の桁を指定するには、書式文字列 "%.桁数e" で変換します。
// 小数点以下を1桁に指定します。
final String str1 = "%.1e".formatted(1.2345);
System.out.println(str1); // "1.2e+00"
// 小数点以下を2桁に指定します。
final String str2 = "%.2e".formatted(-1.2345);
System.out.println(str2); // "-1.23e+00"
// 小数点以下を10桁に指定します。
final String str3 = "%.10e".formatted(1.234e-5);
System.out.println(str3); // "1.2340000000e-05"
全体の桁を指定するには、書式文字列 "%全体桁数e" で変換します。
小数部の桁も合わせて指定する場合は "%全体桁数.小数部桁数e" とします。
// 全体の桁数を15桁に指定します。
// 小数点やマイナス記号といったものも含みます。
// 足りない分は空白で埋まります。
final String str1 = "%15e".formatted(-1.234);
System.out.println(str1); // " -1.234000e+00"
System.out.println(str1.length()); // 15
// 全体の桁数を5桁で指定しています。
// しかし、小数部がデフォルトで6桁なので結果として5桁以上になります。
final String str2 = "%5e".formatted(1.234);
System.out.println(str2); // "1.234000e+00"
System.out.println(str2.length()); // 12
// 小数部も指定します。
final String str3 = "%10.2e".formatted(1.234);
System.out.println(str3); // " 1.23e+00"
System.out.println(str3.length()); // 10
関連記事
当サイト
- API 使用例
公式API仕様
- Formatter (Java SE 19 & JDK 19)
- 書式文字列の公式API仕様です。
本記事では浮動小数点表記は "%e" を紹介しましが、 "%g" や "%a" もあります。
興味がありましたらリンク先をご参照ください。
- 書式文字列の公式API仕様です。