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

时间:2011-08-18 12:19:59

标签: 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();

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

11 个答案:

答案 0 :(得分:39)

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

答案 1 :(得分:22)

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

StringUtils.repeat("ab", 3);  //"ababab"

答案 2 :(得分:15)

答案 3 :(得分:4)

为了了解速度惩罚,我测试了两个版本,一个是Array.fill,另一个是StringBuilder。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html

</IfModule>

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

使用

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();
}

(注意主要功能中的循环是踢JIT)

结果如下:

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);
}

巨大的差异

答案 4 :(得分:4)

Java SE 11

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

演示:

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

输出:

cccccccccccccccccccc

答案 5 :(得分:1)

这是一个基于标准二进制供电算法的O(logN)方法:

public static String repChar(char c, int reps) {
    String adder = Character.toString(c);
    String result = "";
    while (reps > 0) {
        if (reps % 2 == 1) {
            result += adder;
        }
        adder += adder;
        reps /= 2;
    }        
    return result;
}

reps的负值返回空字符串。

答案 6 :(得分:1)

看一下这个样本

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

Simple way to repeat a String in java的形式回答,所以在那里投票

答案 7 :(得分:0)

只需将其添加到您自己的...

public static String generateRepeatingString(char c, Integer n) {
    StringBuilder b = new StringBuilder();
    for (Integer x = 0; x < n; x++)
        b.append(c);
    return b.toString();
}

Or Apache commons有一个可以添加的实用程序类。

答案 8 :(得分:0)

我正在添加另一种方法来解决它:

public String buildString(Character character, int nTimes) {
    return String.format("%" + nTimes + "s", " ").replace(' ', character);
}

答案 9 :(得分:0)

如果您使用的不是 Java 11+(否则我会选择 Arvind Kumar Avinash's answer),您还可以结合使用 String#join(CharSequence, Iterable<? extends CharSequence>Collections#nCopies(int, T)

String result = String.join("", Collections.nCopies(c, n));

答案 10 :(得分:-2)

string result = new StringBuilder().Append('c', n).ToString();