生成n个重复字符串的最简单方法是什么?

foo*_*bar 26 java string character

给定一个字符c和一个数字n,如何创建一个由n次重复c组成的字符串?手动操作太麻烦了:

StringBuilder sb = new StringBuilder(n);
for (int i = 0; i < n; ++i)
{
    sb.append(c);
}
String result = sb.toString();
Run Code Online (Sandbox Code Playgroud)

当然有一些静态库函数已经为我做了这个吗?

G_H*_*G_H 39

int n = 10;
char[] chars = new char[n];
Arrays.fill(chars, 'c');
String result = new String(chars);
Run Code Online (Sandbox Code Playgroud)

  • 它是单引号,而不是变量.除非我在这里遗漏一些东西......今天我有点昏昏沉沉. (4认同)
  • @Tedil:"给出**字符**c和数字n [...]" (4认同)
  • Stream方式确实没有优势。但从 Java 11 开始,你可以使用 `(""+c).repeat(n)` (2认同)

Tom*_*icz 22

如果可以,请使用Apache Commons Lang的StringUtils:

StringUtils.repeat("ab", 3);  //"ababab"
Run Code Online (Sandbox Code Playgroud)


Pan*_*tis 7

为了了解速度损失,我测试了两个版本,一个使用 Array.fill,一个使用 StringBuilder。

public static String repeat(char what, int howmany) {
    char[] chars = new char[howmany];
    Arrays.fill(chars, what);
    return new String(chars);
}
Run Code Online (Sandbox Code Playgroud)

public static String repeatSB(char what, int howmany) {
    StringBuilder out = new StringBuilder(howmany);
    for (int i = 0; i < howmany; i++)
        out.append(what);
    return out.toString();
}
Run Code Online (Sandbox Code Playgroud)

使用

public static void main(String... args) {
    String res;
    long time;

    for (int j = 0; j < 1000; j++) {
        res = repeat(' ', 100000);
        res = repeatSB(' ', 100000);
    }
    time = System.nanoTime();
    res = repeat(' ', 100000);
    time = System.nanoTime() - time;
    System.out.println("elapsed repeat: " + time);

    time = System.nanoTime();
    res = repeatSB(' ', 100000);
    time = System.nanoTime() - time;
    System.out.println("elapsed repeatSB: " + time);
}
Run Code Online (Sandbox Code Playgroud)

(注意 main 函数中的循环是启动 JIT)

结果如下:

elapsed repeat  : 65899
elapsed repeatSB: 305171
Run Code Online (Sandbox Code Playgroud)

这是一个巨大的差异


Arv*_*ash 5

Java SE 11

\n

String#repeat\xe2\x80\x8b(int count)作为 Java SE 11 的一部分引入,使其变得非常容易做到。

\n

演示:

\n
public class Main {\n    public static void main(String[] args) {\n        char ch = \'c\';\n        int n = 20;\n        String result = String.valueOf(ch).repeat(n);\n        System.out.println(result);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
cccccccccccccccccccc\n
Run Code Online (Sandbox Code Playgroud)\n