int n = 12423
から、右詰めで、3桁区切りの長さ12の文字列を求める時、
[ 12,423]
面倒くさい古い方法、NumberFormat デフォルトを使う方法
NumberFormat nf = NumberFormat.getInstance();
String s = String.format("[%12s]", nf.format(n));
同じように古いけど、DecimalFormat でフォーマット
DecimalFormat df = new DecimalFormat("###,###,###"); String s = String.format("[%12s]", df.format(n));
static メソッドの String.format も良いけど Java12からは、formatted(Object... args) がある
NumberFormat nf = NumberFormat.getInstance();
String s = "[%12s]".formatted(nf.format(n));
または、
DecimalFormat df = new DecimalFormat("###,###,###"); String s = "[%12s]".formatted(df.format(n));
でも、そもそも Javaのフォーマット指定%の書式に、カンマ+d で3桁区切りがあるではないですか
%,d なら数値が3桁区切り
だから、、
String s = String.format("[%,12d]", n);
でも良いし、Java12 以降なら、
String s = "[%,12d]".formatted(n);
これで、
[ 12,423]
文字列 → 数値オブジェクト
NumberFormat を使うと ParseException をcatch するように縛りを受ける。
Integer や Long の parseInt や parseLong だって NumberFormatException のリスクを背負うけど、
少なくとも catch文は強制で書かなくて済む。
NumberFormat nf = NumberFormat.getInstance(); try{ int n = nf.parse(string).intValue(); // }catch(ParseException e){ // TODO }
ただ、NumberFormat は、桁区切りカンマは対応してくれるけど、
parse する文字列に、空白が入ってたりすると ParseException 発生するので、
int i = Integer.parseInt(string.trim().replaceAll(",", ""));
が、安定した方法なのだろう。