小编典典

重复字符串的简单方法

all

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

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

repeated.equals("abcabcabc");

相关:

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

已编辑

当不是完全必要时,我会尽量避免 for 循环,因为:

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

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

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

  4. 它们通常很容易出错。涉及索引的 for 循环往往会产生一个错误。

  5. for 循环经常重用相同的变量,增加了很难找到范围错误的机会。

  6. For 循环增加了 bug 搜寻者必须查看的地方的数量。


阅读 110

收藏
2022-03-03

共1个答案

小编典典

String::repeat

". ".repeat(7)  // Seven period-with-space pairs: . . . . . . .

Java
11
中的新String::repeat功能是完全符合您要求的方法:

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

它的Javadoc说:

/**
 * Returns a string whose value is the concatenation of this
 * string repeated {@code count} times.
 * <p>
 * If this string is empty or count is zero then the empty
 * string is returned.
 *
 * @param count number of times to repeat
 *
 * @return A string composed of this string repeated
 * {@code count} times or the empty string if this
 * string is empty or count is zero
 *
 * @throws IllegalArgumentException if the {@code count} is
 * negative.
 *
 * @since 11
 */
2022-03-03