10

たとえば、メソッドでクラスを実装したい

public class Logger {

    public void info(String message, String[] params) {
    }
}

入力が

new Logger().info("Info: param1 is ? , param2 is ?", new  String[] {"a", "b"});

出力は

Info: param1 is a , param2 is b

それを実装する最も簡単な方法は何ですか?

4

4 に答える 4

23

String.format(String format, Object ... args)これにはメソッドを使用できます。を使用する代わりに、( int の場合)、(string の場合) などの?C スタイル%x形式を実行xできます。ds

また、Formatter.formatクラス メソッドを表示することもできます。フォーマットに受け入れられるすべてのフォーマットフラグを示します(String.format()メソッドはFormatterフォーマットを行うために使用します)。

于 2011-09-02T07:28:24.063 に答える
5

次のコードは、必要に応じて実行します。

public class Logger {

    public static void main(String[] args) {
        new Logger().info("Info: param1 is ?, param2 is ?", new String[] { "a", "b" });
        new Logger().info("Info: param1 is ?, param2 is ?", "a", "b");
    }

    public void info(final String message, final String... args) {
        System.out.printf(message.replace("?", "%s") + "%n", args);
    }

}

ただし、「?」の代わりに正しいフォーマットのプレースホルダーを使用することを検討する必要があります。例えば:

 public class Logger {

    public static void main(String[] args) {
        new Logger().info("Info: param1 is %s, param2 is %s", new String[] { "a", "b" });
        new Logger().info("Info: param1 is %s, param2 is %s", "a", "b");
    }

    public void info(final String message, final String... args) {
        System.out.printf(message + "%n", args);
    }

}

両方のバージョンが出力されます:

Info: param1 is a, param2 is b
Info: param1 is a, param2 is b
于 2011-09-02T07:34:10.667 に答える
2

のエスケープについて心配する必要'?'がなく、printf() スタイルのフォーマット文字列を使用できない場合は、次の方法で問題を解決できます。

public void info(String message, String[] params) {
    System.out.println(
        String.format(message.replace("?", "%s"), params)
    );
}

そのようです:

info("apple is to ? as eve is to ?",
    new String[] { "banana", "noon" });

どちらが印刷されますか:apple is to banana as eve is to noon


Patternエスケープなどのより高度なロジックが必要な場合は、本格的な regexpベースの検索と置換が必要になるでしょう。

于 2011-09-02T07:36:11.200 に答える
0

params[] のループで正規表現を使用してすべての '?' を検索します。文字列に入れ、現在のパラメーターに置き換えます。null に注意して、適切なエスケープ方法を見つけてください。(\? は問題を起こすと思いますが、もっと良いですか??)

于 2011-09-02T07:31:50.293 に答える