Вопрос-ответ

Simple way to repeat a string

Простой способ повторить строку

Я ищу простой метод или оператор commons, который позволяет мне повторять некоторую строку n раз. Я знаю, что мог бы написать это, используя цикл for, но я хочу избегать циклов for всякий раз, когда это необходимо, и где-то должен существовать простой прямой метод.

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

repeated.equals("abcabcabc");

Связано с:

repeat string javascript
Создайте NSString, повторив другую строку заданное количество раз

Отредактировано

Я стараюсь избегать циклов for, когда они не являются полностью необходимыми, потому что:


  1. Они увеличивают количество строк кода, даже если они спрятаны в другой функции.



  2. Кто-то, читающий мой код, должен понять, что я делаю в этом цикле for . Даже если он прокомментирован и имеет значимые имена переменных, они все равно должны убедиться, что он не делает ничего "умного".



  3. Программисты любят вставлять умные вещи в циклы for, даже если я пишу это так, чтобы "делать только то, для чего оно предназначено", это не исключает того, что кто-то придет и добавит какое-нибудь дополнительное умное "исправление".



  4. В них очень часто легко ошибиться. Циклы For, включающие индексы, имеют тенденцию генерировать ошибки off by one.



  5. Циклы For часто повторно используют одни и те же переменные, увеличивая вероятность действительно труднодоступных ошибок, ограничивающих область видимости.



  6. Циклы For увеличивают количество мест, которые должен искать багхантер.



Переведено автоматически
Ответ 1

Вот самая короткая версия (требуется Java 1.5 +):

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

Где n - количество раз, которое вы хотите повторить строку, а s - строка для повторения.

Импорт или библиотеки не требуются.

Ответ 2

Если вы используете Java <= 7, это настолько "лаконично", насколько это возможно:

// create a string made up of n copies of string s
String.format("%0" + n + "d", 0).replace("0", s);

В Java 8 и выше есть более понятный способ:

// create a string made up of n copies of string s
String.join("", Collections.nCopies(n, s));

Наконец, для Java 11 и выше существует новый repeat​(int count) метод специально для этой цели (ссылка)

"abc".repeat(12);

В качестве альтернативы, если ваш проект использует библиотеки java, есть больше вариантов.

Для Apache Commons:

StringUtils.repeat("abc", 12);

Для Google Guava:

Strings.repeat("abc", 12);
Ответ 3

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
*/

Ответ 4

Язык Commons StringUtils.repeat()

Использование:

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

repeated.equals("abcabcabc");
java string