0

someFunction("%s, %s, %s", 1, true, "qwe");結果が必要な場所にこのようなものをJavaで作成することは可能1 true qweですか?

using や他のクラスなど、さまざまなアプローチで試しましたが、PrintStreamその方法がわかりません。

これまでのところ、確かに思われることの 1 つは定義です。

public static String prepare(String format, Object... arguments) {
    return ???
}

しかし、それを超えてそれを行う方法がわかりません。アドバイスをいただけますか?

4

4 に答える 4

4

これは何String.formatをするかですが、あなたはすでにそれを知っていて、独自の関数を構築したいと思っていると思います.

あなたが持っている関数のヘッダーは正しいです。countここで、最初にゼロに設定されたカウンターを作成しStringBuilder、 を作成して、文字列をスキャンするループを実行する必要がありformatます。

ループで 以外の文字が検出された場合は'%'、その文字を に追加しますStringBuilder。それ以外の場合は、プログラムが認識する形式の次の文字を確認し、配列countからその位置にあるオブジェクトを取得します。arguments必要に応じてオブジェクトをフォーマットし、結果を に追加しStringBuilderます。インクリメントcount.

ループが終了するStringBuilderと、呼び出し元に返す結果文字列が含まれます。

もちろん、これはアルゴリズムの骨組みにすぎません。実際の実装では、次のような他の多くの重要なことを処理する必要があります。

  • ループ内が配列countの末尾を超えて進まないことを確認するarguments
  • finalcountがオブジェクトの数以上であることを確認するarguments
  • arguments配列からオブジェクトに書式指定子を適用できることを確認する

等々。

于 2013-11-02T10:40:58.817 に答える
4

メソッドを使用できますString.format

public static String prepare(String format, Object... arguments) {
    // do same sanity checks if needed
    return String.format(format, arguments);
}
于 2013-11-02T10:34:59.337 に答える
3

はい、これはまさに次のことString.format()です。

public class Test {

  public static void main(String[] args) {  
    System.out.println(format("%s %s %s", 12, "A", true));
  }

  public static String format(String format, Object ... args) {
    return String.format(format, args);
  }

}
于 2013-11-02T10:34:51.623 に答える
2

それが意図されてString.format()いることです

String.format("%s, %s, %s", 1, true, "666");

あなたの場合、

return String.format(format, arguments);
于 2013-11-02T10:35:25.220 に答える