Java 数値の3桁区切りフォーマット

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(",", ""));

が、安定した方法なのだろう。