🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1934閲覧

Java】String.formatで入力値によって0埋めの桁数指定する方法が知りたいです

tmp-user

総合スコア44

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2019/10/19 01:54

はじめて質問させていただきます。

初心者なのですが業務でJavaを扱うこととなり今大急ぎで学習サイト等を取り組んでいるのですが分からないことがあります。
####String.formatを用いての0埋め
に関してです。

入力された数値に対して桁数を指定の上数値を出力したいのですが、桁数を変数に割り当てる方法が調べてもわかりませんでした。

int diget =sc.nextInt();
int number =sc.nextInt();

System.out.println(String.format("%0digetd",num));

とイメージ的には書くかな、と思ったのですがRuntimeErrorとなってしまいます。

System.out.println(String.format("%05d",num));
このような形で桁数指定はできるのとぱっと見の段階で私の記述コードに違和感があることまでは理解できています。

桁数を入力値によって指定する方法はどういったものがあるのでしょう。
ご教示いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Digit(桁数指定)とNunber(実際に表示する数)は、外部から入力されるという認識で大丈夫でしょうか…

たぶん、もっとスマートな解決方法はありそうですが

java

1 2 //これらがどっかから何かの形で入力される 3 int digit = 5 ; 4 int num = 10 ; 5 6 String f = "%0" + digit +"d"; 7 8 System.out.println(String.format(f,num)); 9

String.formatの引数1番目を、あらかじめ前処理で作成して入れる形で実現してみました

投稿2019/10/19 02:03

hermit19901127

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tmp-user

2019/10/19 02:20

ありがとうございます!! diget(綴りまちがえました)とnumberはコンソールから入力されてスキャナーで受け取るイメージです。 あらかじめ文字列として取り入れる方法があったのですね。 全く思いつかない方法でした。 こういった柔軟な考え方が大切だと言うことも実感でき、たいへん助かりました。
hermit19901127

2019/10/19 02:31

若干力尽くの実装感が否めないので、他の人の解答が気になる次第です…
dodox86

2019/10/19 03:46

Javaの書式指定文字列での幅指定についてはもしかしたら比較的「あるある」な質問かもしれません。(<個人的な意見ですが) https://stackoverflow.com/questions/2550123/java-printf-using-variable-field-size teratailでも過去、近い内容で質問回答がありました。 https://teratail.com/questions/111215 C言語ですとスマートに"%0*d" で桁(幅)数の指定が出来ますが、残念ですね。 int digit = 5; int num =10; printf("%0*d", digit, num); /* "00010"と出力 */ 最新のJava9の仕様でも書式指定に幅指定を可能とするものは追加されていないようなので、 https://docs.oracle.com/javase/9/docs/api/java/util/Formatter.html 現状ですと、hermit19901127さんの回答がほぼ唯一の方法だと思います。
dodox86

2019/10/19 03:59 編集

「String#format、実はC言語での"%0*d"相当の書式があるんじゃないかなー?」と調べてみたら、やっぱり無かったので上記、コメントさせていただいた次第です。失礼致しました。
hermit19901127

2019/10/19 20:45

C言語でそのような記法ができる事は初耳です… そのうえでdodox86さんに回答を肯定して頂けた結果、やはりこれが最適解だという結論に至りました。
tmp-user

2019/10/20 10:33

ありがとうございます。 私と同様に学習サイトの問題で見た、という方がこの壁に当たっているのかもしれませんね・・・。 dodox86様のおかげでhermit19901127様のアドバイスが最適解ということも理解ができたので大変ありがたいです。 存在しないやり方を探しているのか無知なだけなのかがまだ判断がつかない状況ですので鋭意学習を積み自己研鑽していきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問