重复字符串的简单方法

2022-08-31 04:07:30

我正在寻找一个简单的commons方法或运算符,允许我重复一些字符串n次。我知道我可以使用for循环来编写这个,但我希望在必要时避免for循环,并且应该在某个地方存在一个简单的直接方法。

String str = "abc";
String repeated = str.repeat(3);

repeated.equals("abcabcabc");

相关内容:

重复字符串 javascript 通过重复另一个字符串给定次数来创建 NSString

编辑

当它们不是完全必要的时,我尽量避免循环,因为:

  1. 它们增加了代码行数,即使它们隐藏在另一个函数中。

  2. 有人在阅读我的代码时,必须弄清楚我在这个 for 循环中做了什么。即使它被注释并且具有有意义的变量名称,他们仍然必须确保它没有做任何“聪明”的事情。

  3. 程序员喜欢把聪明的东西放在循环中,即使我把它写成“只做它打算做的事情”,这并不妨碍有人过来添加一些额外的聪明的“修复”。

  4. 他们往往很容易犯错。For 涉及索引的循环往往会由一个错误生成。

  5. For 循环通常重用相同的变量,从而增加了真正难以找到范围错误的机会。

  6. For 循环增加了 bug 猎人必须查找的位置数。


答案 1

以下是最短的版本(需要 Java 1.5+):

repeated = new String(new char[n]).replace("\0", s);

其中 是要重复字符串的次数,也是要重复的字符串。ns

无需导入或库。


答案 2

如果您使用的是Java < = 7,那么它就像它所得到的一样“简洁”:

// create a string made up of n copies of string s
String.format("%0" + n + "d", 0).replace("0", s);

Java 8及更高版本中,有一种更具可读性的方式:

// create a string made up of n copies of string s
String.join("", Collections.nCopies(n, s));

最后,对于Java 11及以上版本,有一个专门用于此目的的新方法(linkrepeat​(int count))

"abc".repeat(12);

或者,如果您的项目使用Java库,则还有更多选项。

对于 Apache Commons

StringUtils.repeat("abc", 12);

对于谷歌番石榴

Strings.repeat("abc", 12);