追加の書式設定が必要ない場合、数値を書式設定するときに書式指定子に%s
を使用しない理由はありますか?
例えば.
int answer = 42;
String text = String.format("The answer is %s", answer);
より一般的ではなく:
int answer = 42;
String text = String.format("The answer is %d", answer);
私が尋ねる理由は、ソースコードに自動化された変更を行いたいので、answer
のタイプがint
かString
または他の何か
数千の区切り記号やその他のロケール固有のオプションに関して、潜在的な違いがあると予想しています。最初のアプローチは、Integer
がFormattable
を実装していないため、Integer.toString
(ロケールに依存しない)を呼び出すだけです。 2番目は、ロケールに依存する可能性のある整数フォーマットを使用します-それはcould何千もの区切り文字を挿入し、潜在的に異なる数字セットなどを使用します。
ドキュメントをより注意深く見ると、グループ化セパレーターは特定のフォーマットフラグなしでは適用されないように見えますが、
数値ローカリゼーションアルゴリズム
整数部、小数部、および指数(データ型に応じて)の数字が取得された後、次の変換が適用されます。
- 文字列内の各数字dは、現在のロケールのゼロ数字zに対して計算されたロケール固有の数字に置き換えられます。つまり、d-'0' + zです。
違いが生じるサンプル:
import Java.util.Locale;
public class Test {
public static void main(String[] args) {
Locale.setDefault(new Locale("hi", "IN"));
System.out.printf("String: %s; Number: %d\n", 1234, 1234);
}
}