Какой самый простой способ создать строку из n повторяющихся символов? - PullRequest
25 голосов
/ 18 августа 2011

Учитывая символ c и число n, как я могу создать строку, состоящую из n повторений c?Делать это вручную слишком громоздко:

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

Конечно, есть какая-то статическая библиотечная функция, которая уже делает это для меня?

Ответы [ 8 ]

39 голосов
/ 18 августа 2011
int n = 10;
char[] chars = new char[n];
Arrays.fill(chars, 'c');
String result = new String(chars);
22 голосов
/ 18 августа 2011

Если можете, используйте StringUtils от Apache Commons Lang :

StringUtils.repeat("ab", 3);  //"ababab"
15 голосов
/ 18 августа 2011
4 голосов
/ 19 мая 2017

Чтобы иметь представление о снижении скорости, я протестировал две версии, одну с Array.fill и одну с StringBuilder.

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

с использованием

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

(обратите внимание, что цикл в главной функции должен запускаться в JIT)

Результаты следующие:

elapsed repeat  : 65899
elapsed repeatSB: 305171

Это огромный разница

1 голос
/ 19 октября 2016

взгляните на этот образец

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

форма ответа Простой способ повторить строку в java , так что проголосуйте там

1 голос
/ 18 августа 2011

Вот метод 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 возвращают пустую строку.

0 голосов
/ 31 января 2019
string result = new StringBuilder().Append('c', n).ToString();
0 голосов
/ 18 августа 2011

Просто добавьте его к своему ...

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

Или Apache commons имеет служебный класс, который можно добавить.

...