gpt4 book ai didi

java - 从重复的字符构造字符串

转载 作者:行者123 更新时间:2023-12-01 18:25:00 28 4
gpt4 key购买 nike

在 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

关于java - 从重复的字符构造字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26504151/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com