簡體   English   中英

根據重復的字符構造一個字符串

[英]Construct a string from a repeated character

在Java中,我需要在編譯時構造一個n為零且n未知的字符串。 理想情況下,我會使用

String s = new String('0', n);

但是不存在這樣的構造函數。 CharSequence似乎也沒有合適的構造函數。 所以我很想使用StringBuilder構建自己的循環。

在我這樣做並冒被老板冒失的風險之前,有人可以建議:Java是否有標准的方法來做到這一點? 在C ++中, std::string構造函數之一允許這樣做。

如果您不介意創建額外的字符串:

String zeros = new String(new char[n]).replace((char) 0, '0');

或更明確(可能更有效):

char[] c = new char[n];
Arrays.fill(c, '0');
String zeros = new String(c);

在性能方面, Arrays.fill選項在大多數情況下似乎表現更好,但對於大型字符串尤其如此。 對於大型字符串,使用StringBuilder相當慢,而對於小型字符串則使用高效。 使用replace是一個很好的襯板,對於較大的字符串也可以執行,但不如filll

不同n值的微基准:

Benchmark                       (n)  Mode  Samples        Score         Error  Units
c.a.p.SO26504151.builder          1  avgt        3       29.452 ±       1.849  ns/op
c.a.p.SO26504151.builder         10  avgt        3       51.641 ±      12.426  ns/op
c.a.p.SO26504151.builder       1000  avgt        3     2681.956 ±     336.353  ns/op
c.a.p.SO26504151.builder    1000000  avgt        3  3522995.218 ±  422579.979  ns/op
c.a.p.SO26504151.fill             1  avgt        3       30.255 ±       0.297  ns/op
c.a.p.SO26504151.fill            10  avgt        3       32.638 ±       7.553  ns/op
c.a.p.SO26504151.fill          1000  avgt        3      592.459 ±      91.413  ns/op
c.a.p.SO26504151.fill       1000000  avgt        3   706187.003 ±  152774.601  ns/op
c.a.p.SO26504151.replace          1  avgt        3       44.366 ±       5.153  ns/op
c.a.p.SO26504151.replace         10  avgt        3       51.778 ±       2.959  ns/op
c.a.p.SO26504151.replace       1000  avgt        3     1385.383 ±     289.319  ns/op
c.a.p.SO26504151.replace    1000000  avgt        3  1486335.886 ± 1807239.775  ns/op

創建一個n大小的char數組並將其轉換為String:

char[] myZeroCharArray = new char[n];

for(int i = 0; i < n; i++) myZeroCharArray[i] = '0';

String myZeroString = new String(myZeroCharArray);

沒有標准的JDK方式,但是Apache通用(幾乎是事實上的標准)具有StringUtils.repeat()方法,例如:

String s = StringUtils.repeat('x', 5); // s = "xxxxx"

或普通的舊字符串格式

int n = 10;
String s = String.format("%" + n + "s", "").replace(' ', '0');
System.out.println(s);

暫無
暫無

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

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