Подтвердить что ты не робот

Каков самый простой способ генерации строки из n повторяющихся символов?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 4

Для чего стоит, если ваш персонаж является пространством (для создания пробела):

String spacePad(int n) {
    return (n == 0 ? "" : String.format("%"+n+"s", " "));
}

Ответ 5

Чтобы получить представление об ограничении скорости, я протестировал две версии: одну с 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

Это огромная разница

Ответ 6

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

Ответ 8

Просто добавьте его в свой собственный...

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 есть класс утилиты, который вы можете добавить.

Ответ 9

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