簡體   English   中英

String.format運行時格式

[英]String.format runtime formatting

假設我想在兩個字符串之間添加一些空格,如果我知道要添加的空間量為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沒有黑客,我很好奇。

這不是一個骯臟的黑客。 String.format()函數需要一個定義格式的String 如果該String是您必須在運行時生成的,那么可以使用任何必要的方法來執行此操作,即使它是對String.format()另一個調用。 這將使您的代碼更清晰,IMO,將格式字符串存儲在單獨的變量中,而不是嵌套調用:

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");

這看起來也很清楚。 無論你是內聯還是提前,都取決於個人喜好; 對於更復雜的格式化字符串,差異可能更明顯。

添加解釋性注釋可以解決任何混淆,並且可能是您可以做的最重要的事情來清理代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM