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

标签 java string

在 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/

相关文章:

html - 在不破坏 HTML 标签的情况下切割 HTML 字符串

Python - 解析INI文本(不是INI文件)

string - 如何在不将换行符插入原始字符串的情况下包装原始字符串文字?

java - 使用 Jmockit 进行 Servlet JUnit 测试

java - 使用 Java 从 Json Payload 获取字段 ID 值

java - 如何停止 BufferedImage.getGraphics() 打开 X11 设备?

java - OptaPlanner:使规划实体链接起来并且可以为空

php - 将括号之间的内容放入数组中

java - Null Check 增加圈复杂度

java - 如何处理 StaleElementReferenceException