以前にMessage.format
を使用して、null様のnullという文字列を埋める方法を調べました。
Java15にて新しくString
にformatted
メソッドが増え、null様のnullという文字列を埋める方法が新しくできるようになりました。内部的に使用しているFormatter
クラス自体はJava5からある機能ではありますが、わざわざMessage.format
を使用することなく文字列を埋められるようになったことが嬉しいため、今回素振りします。
なお、nullという文字列を入れたくない、という記事に関してはこちらに記載しましたので、ご参考ください。
環境
- Java
- 17
コード
使い方自体は簡単です。%s
で文字列を埋められます。
String actual = "%s様".formatted("きり丸"); assertThat(actual).isEqualTo("きり丸様");
Java13のテキストブロックでも非常に使いやすいですね。N$
も付与することで、明示的なインデックスを指定することもできます。
// 明示的なインデックス指定なので、ゴリラ様になる String actual = """ %3$s様 貴方だけに素晴らしい商品を用意しました! 商品1: %1$s 商品2: %2$s """.formatted("きり丸", "りんご", "ゴリラ"); String expected = """ ゴリラ様 貴方だけに素晴らしい商品を用意しました! 商品1: きり丸 商品2: りんご """; assertThat(actual).isEqualTo(expected);
もっと詳しくFormatter
の挙動を知りたい方はひしだま様の記事や公式JavadDocを確認しましょう。
なお、IntelliJ IDEAだと期待しない挙動をしそうなときに警告してくれるのは嬉しいですね。実際は、こういう文字列を埋める方法はマスタでDBに管理されていたり、プロパティから呼び出すことが多いと思うので、警告してくれないことが多いと思いますが…。
終わりに
Java15より前の世界では、文字列に情報を埋め込みたいのに、実際にはMessageFormat
やFormatter
を使用しなければいけなかったのは非常に直感的ではなかったです。
LTSのJava17がでてきたことで、こちらの機能も使用できるようになって非常に嬉しいです。今後も積極的に使っていきたいです。
類似記事
- Javaでnull様等のnullという文字列を埋める(MessageFormat) - きり丸の技術日記
- Javaでnullを文字列結合したら"null"になるので回避する策を模索した話 - きり丸の技術日記