0

2 つの文字列の間にスペースを追加したいとします。追加するスペースの量が (コンパイル時に) 10 であることがわかっている場合は、次のように実行できます。

String s = String.format("%-10s %s", "Hello", "World");

しかし、実行時にそれを把握しなければならない場合、それが 10 であることを知らない場合はどうなるでしょうか?

int space = new java.util.Random().nextInt(n);
String s = String.format("-???%s %s, "Hello", "World");

私は連結できることを知っています

String.format("%-" + space + "s %s";, "Hello", "World"));

しかし、それは汚いハックのように感じます。実行時に引数を指定するハックの少ない方法はありますか? フォーマッタはほとんど役に立ちません。文字列を操作するためのより適切で効率的な方法を知っていますがString.format、ハックなしで可能かどうか興味があります。

4

1 に答える 1

2

それは本当に汚いハックではありません。関数はフォーマットの定義をString.format()期待しています。StringそれStringが実行時に生成しなければならないものである場合、たとえそれが の別の呼び出しであっても、それを行うために必要な手段を使用することは許容されますString.format()。呼び出しをネストするのではなく、フォーマット文字列を別の変数に格納すると、コードが少し明確になります。

int width = ...;
String fmt = String.format("-%i%%s %%s", width);
String formatted = String.format(fmt, "Hello", "World");

とは対照的に:

int width = ...;
String formatted = String.format(String.format("-%i%%s %%s", width), "Hello", "World");

前者は明確で、かなり自己文書化されています。それがあなたの空想に合っている場合は、事前にまたはインラインで、連結を使用して文字列を作成することもできます。

int width = ...;
String fmt = "-" + width + "%s %s";
String formatted = String.format(fmt, "Hello", "World");

または:

int width = ...;
String formatted = String.format("-" + width + "%s %s", "Hello", "World");

それも私にはかなりはっきりと見えます。インラインで行うか、事前に行うかは、個人の好みによって異なります。より複雑なフォーマット文字列の場合、違いがより明確になる場合があります。

説明用のコメントを追加することで混乱が解消され、おそらくコードを整理するためにできる最も重要なことです。

于 2013-11-06T03:16:07.330 に答える