きり丸の技術日記

技術検証したり、資格等をここに残していきます。

Javaでnull様等のnullという文字列を埋める(String#formatted)

以前Message.formatを使用して、null様のnullという文字列を埋める方法を調べました。

Java15にて新しくStringformattedメソッドが増え、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より前の世界では、文字列に情報を埋め込みたいのに、実際にはMessageFormatFormatterを使用しなければいけなかったのは非常に直感的ではなかったです。

LTSのJava17がでてきたことで、こちらの機能も使用できるようになって非常に嬉しいです。今後も積極的に使っていきたいです。

類似記事

参考情報