从重复的字符构造一个字符串

时间:2014-10-22 09:19:16

标签: java string

在Java中,我需要在编译时构造一个n零的字符串,n未知。理想情况下我会使用

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

但是没有这样的构造函数。 CharSequence似乎也没有合适的构造函数。因此,我很想使用StringBuilder构建自己的循环。

在我这样做之前,冒着被老板弄错的风险,任何人都可以提出建议:在Java中有没有一种标准的方法可以做到这一点?在C ++中,std::string构造函数之一允许这样做。

5 个答案:

答案 0 :(得分:4)

如果您不介意创建额外的字符串:

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

答案 1 :(得分:0)

创建一个n大小的char数组并将其转换为String:

char[] myZeroCharArray = new char[n];

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

String myZeroString = new String(myZeroCharArray);

答案 2 :(得分:0)

答案 3 :(得分:0)

没有标准的JDK方式,但Apache commons(几乎是一个事实上的标准)具有StringUtils.repeat()方法,例如:

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

答案 4 :(得分:0)

或普通的旧字符串格式

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