質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.38%
Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

85閲覧

Ansroid java String.formatの書式について

tanuki_

総合スコア35

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2024/10/23 06:18

編集2024/10/23 07:34

実現したいこと

文字列40文字に対して40文字に満たない場合はスペースで埋めたい。
数字2桁に対して2桁に満たない場合は0で埋めたい

数値2桁に対して2桁に満たない場合は0で埋めたい

発生している問題・分からないこと

既存のソースを参考にスペースで埋めたいので
String no = String.format("%02d", no);
と記述したが、
'java.util.IllegalFormatConversionException' 例外がスローされる。

エラーメッセージ

error

1メソッドは 'java.util.IllegalFormatConversionException' 例外をスローしました。

該当のソースコード

java

1String name = String.format("%40c", customerName); 2スペース埋めは以下で上手くいきました。 3String name = String.format("%40s", customerName) 4以下の0埋めが上手くいきません。↓ 5 public void setReserveNum1(String reserveNum1) { 6 String num1 = String.format("%02d", reserveNum1); 7 mData.put("reserveNum1", num1); 8 } 9 10

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

既存のソースコード[$]を使っていたがこれは[%]の間違いだと確認できた。
スペース埋めは"%20s"で上手くいったが0埋めが上手くいかない。

補足

特になし

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

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

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

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

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

guest

回答1

0

ベストアンサー

変数の型(数字と数値)の別はご理解されているでしょうか。

String no = String.format("%02d", no);

String.format の引数になっている no と返り値を受け取る変数 no が同じ名前です。
引数の no が int 等だったとしたら int 型と String 型の二つの no 変数が存在することになり、コンパイル出来ません。
引数の no が String 型だったとしても、戻り値を受け取る方に "String" と書いていると変数の宣言として扱われるので同じ変数を 2 度宣言することになりコンパイル出来ませんし、 String.format で "%02d" と指定した場合の引数は整数型で無ければなりませんので、その点でも正常に動作は出来ません。

どのような入力からどのような出力を得たいのかを具体的な方法・値・コードで書いて頂ければ、修正したコードを出せると思います。
例えば標準入力から入力された10文字未満の数字列を数値として扱い10文字右詰め0埋めで表示するのであれば、

java

1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) throws Exception { 5 Scanner sc = new Scanner(System.in); 6 int a = sc.nextInt(); 7 String b = String.format("%010d", a); 8 System.out.println(b); 9 } 10}

入力

123

出力

0000000123

java

1 public void setReserveNum1(String reserveNum1) { 2 String num1 = String.format("%02d", reserveNum1); 3 mData.put("reserveNum1", num1); 4 }

String.format のフォーマット "%02d" は数値に対してしか使えません。 reserveNum1 は String です。

https://docs.oracle.com/javase/jp/8/docs/api/java/util/Formatter.html

変換引数のカテゴリ説明
'b', 'B'一般引数argがnullの場合、結果は「false」になります。argがbooleanまたはBooleanの場合、結果はString.valueOf(arg)により返される文字列になります。そうでない場合、結果はtrueになります。
'h', 'H'一般引数argがnullの場合、結果は「null」になります。それ以外の場合、結果はInteger.toHexString(arg.hashCode())の呼出しで取得されます。
's', 'S'一般引数argがnullの場合、結果は「null」になります。argがFormattableを実装する場合、arg.formatToが呼び出されます。それ以外の場合、結果はarg.toString()の呼出しで取得されます。
'c', 'C'文字結果はUnicode文字です。
'd'整数結果は、10進整数として書式設定されます。

(以下略)

reserveNum1 を数値に変換して format に通すのが良さそうに見えます。

java

1 String num1 = String.format("%02d", Integer.parseInt(reserveNum1));

投稿2024/10/23 08:09

編集2024/10/23 08:30
jimbe

総合スコア13117

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.38%

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

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

質問する

関連した質問