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

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

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

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

1回答

2391閲覧

ゼロ埋めがうまくいかない

aka_aka

総合スコア6

Java

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/04/22 11:08

編集2022/01/12 10:55

目標、達成したいこと

Spring Bootで開発を行っているのですが、ゼロ埋めについて聞きたいことあります。

ServiceクラスからRepositoryクラスに「001」という値を渡して、
Repositoryクラスで受け取った「001」をもとにクエリを発行してDBからデータを取得したいです。

上手くいかないところ

Serviceクラスで「1」を「001」とゼロ埋めをしてRepositoryクラスに「001」を渡しているのですがRepositoryクラスで受け取った値を見ると「1」になってしまっており、上手くいきません。
(Serviceクラスで「001」になっているのは確認済みです。)

これはゼロ埋めの問題なのでしょうか?
それとも、何か他の要因なのでしょうか?

ご教授お願い致します。

試したこと・調査したこと

・下記のサイトを参考にさせていただき、String.formatを用いてゼロ埋めをしました。
https://qiita.com/kikkutonton/items/400dcfc343864028800e

・下記のようにServiceクラスを書きました

java

1String num = "1"; 2String numFormat = String.format("%03d", num); 3 4String find = musicRepository.findByName(numFormat).getMusicname();

・Repositoryクラスで下記のようにコードを書きましたが、nameのところに「001」ではなく、「1」が入ってきています。

java

1@Query(value = "SELECT * " 2 + " FROM music_info " 3 + " WHERE NAME = :name", nativeQuery = true) 4 Music findByName(@Param("name") String name); 5

・何か型の問題かと思い、
Music findByName(@Param("name") String name);のStringのところをLong型に試してみました。

・追記なのですが
String find = musicRepository.findByName(numFormat).getMusicname();の
findByNameの引数に「001」をべたに書いてもダメでした。

補足情報(FW/ツールのバージョンなど)

Windows10
Spring Boot version2.2.1.RELEASE

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

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

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

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

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

m.ts10806

2020/04/22 11:17

コードは全体の流れが分かるものを提示してください。 また”「1」が入ってきています。”とはどのように確認されたのでしょうか。
aka_aka

2020/04/22 11:36

>コードは全体の流れが分かるものを提示してください。 承知しました。 >また”「1」が入ってきています。”とはどのように確認されたのでしょうか。 デバッグで追い確認いたしました。
aka_aka

2020/04/22 11:38

デバッグをしたときに、ビューの変数のところで「name」の値を確認しました。
guest

回答1

0

java

1String num = "1"; 2String numFormat = String.format("%03d", num);

そもそもこの書き方では、通常のJavaではエラーを起こします。
"%03d"の"d"は整数を意味しますが、numは文字列型なので、変換を受け付けません。
根本的に"0"は数値にしか使えないフラグなので、文字列で0埋めしようということ自体不可能です。
Spring Bootのことはよく知りませんが、ここでエラーとなってしまうため、変換がなされずそのまま通っているのではないでしょうか?

これが整数なら変換が通るので、いったん整数に変換する(1)か、文字列で先頭に"0"を付けて、必要な長さぶん切り取る(2)といった処置が必要でしょう。

java

1(1) 2String num = "1"; 3String numFormat = String.format("%03d", Integer.parseInt(num)); 4 5(2) 6String num = "1"; 7String numFormat = "000" + num; 8numFormat = numFormat.substring(numFormat.length() - 3);

投稿2020/04/22 12:54

編集2020/04/22 13:52
swordone

総合スコア20649

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

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

m.ts10806

2020/04/22 13:22

>そもそもこの書き方では、通常のJavaではエラーを起こします。 ですよね。 良かった自分だけじゃなかった・・・。 何度書いてもpaiza.ioですら動かないから自身でEclipseで立ち上げて実行しても同じエラーで動かなくて、 質問者に「本当にこれ動いてるか」確認しようかどうしようか悩んでるところでした。
aka_aka

2020/04/22 13:28 編集

ご回答ありがとうございます。 やはり、(1)(2)を実装してみたのですがnameに1が入ってました... 少し気になったのですが、Entityクラスで @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "NAME") private long name; と書いていたのですが、何かコードが間違えているのですかね... 検討違いでしたら申し訳ないです。
m.ts10806

2020/04/22 13:29 編集

Spring Bootでも確認しましたが、そもそもString.format() の時点で同じようにIllegalFormatConversionException起きるので、動いてたとは思えないですね。
m.ts10806

2020/04/22 13:30

swordoneさんのコードではどちらもきちんと「001」が来てました。 ※ただ、subString→substringですね。
swordone

2020/04/22 13:53

ご指摘ありがとうございます(どうしてもsub"string"を単語として見てしまう…)
退会済みユーザー

退会済みユーザー

2020/04/22 14:27 編集

なんとなくだけど String.format("%3s", "1").replace(" ", "0") こっちのがすきw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問