Простой способ повторить строку в Java
Я ищу простой метод или оператор, который позволяет мне повторять некоторые строки n раз. Я знаю, что мог бы написать это, используя цикл for, но я хочу избегать циклов for всякий раз, когда это необходимо, и где-то должен существовать простой прямой метод.
String str = "abc";
String repeated = str.repeat(3);
repeated.equals("abcabcabc");
Относится к:
Повторите строку javascript Создайте NSString, повторяя другую строку заданное количество раз
отредактированный
Я стараюсь избегать циклов, когда они не являются полностью необходимыми, потому что:
Они добавляют к числу строк кода, даже если они спрятаны в другой функции.
Кто-то, читающий мой код, должен выяснить, что я делаю в цикле for. Даже если он прокомментирован и имеет значимые имена переменных, они все равно должны убедиться, что он не делает ничего "умного".
Программисты любят помещать умные вещи в циклы, даже если я пишу это для того, чтобы "делать только то, для чего они предназначены", что не исключает возможности появления кого-то и добавления некоторого дополнительного умного "исправления".
Их очень часто легко ошибиться. Для циклов, включающих индексы, склонны генерировать по одной ошибке.
Для циклов часто используются одни и те же переменные, что увеличивает вероятность того, что действительно трудно найти ошибки в области видимости.
Для циклов увеличьте количество мест, которые должен искать охотник за насекомыми.
34 ответа
Сводка для быстрого ознакомления:
public class StringRepeat {
// Java 11 has built-in method - str.repeat(3);
// Apache - StringUtils.repeat(3);
// Google - Strings.repeat("",n);
// System.arraycopy
static String repeat_StringBuilderAppend(String str, int n) {
if (str == null || str.isEmpty())
return str;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(str);
}
return sb.toString();
}
static String repeat_ArraysFill(String str, int n) {
String[] strs = new String[n];
Arrays.fill(strs, str);
return Arrays.toString(strs).replaceAll("\\[|\\]|,| ", "");
}
static String repeat_Recursion(String str, int n) {
if (n <= 0)
return "";
else
return str + repeat_Recursion(str, n - 1);
}
static String repeat_format1(String str, int n) {
return String.format(String.format("%%%ds", n), " ").replace(" ", str);
}
static String repeat_format2(String str, int n) {
return new String(new char[n]).replace("\0", str);
}
static String repeat_format3(String str, int n) {
return String.format("%0" + n + "d", 0).replace("0", str);
}
static String repeat_join(String str, int n) {
return String.join("", Collections.nCopies(n, str));
}
static String repeat_stream(String str, int n) {
return Stream.generate(() -> str).limit(n).collect(Collectors.joining());
}
public static void main(String[] args) {
System.out.println(repeat_StringBuilderAppend("Mani", 3));
System.out.println(repeat_ArraysFill("Mani", 3));
System.out.println(repeat_Recursion("Mani", 3));
System.out.println(repeat_format1("Mani", 3));
System.out.println(repeat_format2("Mani", 3));
System.out.println(repeat_format3("Mani", 3));
System.out.println(repeat_join("Mani", 3));
System.out.println(repeat_stream("Mani", 3));
}
}
public static String rep(int a,String k)
{
if(a<=0)
return "";
else
{a--;
return k+rep(a,k);
}
Вы можете использовать этот рекурсивный метод для достижения желаемой цели.
repeated = str + str + str;
Иногда просто лучше. Каждый, кто читает код, может видеть, что происходит.
И компилятор будет делать причудливые вещи с StringBuilder
за кулисами для вас.
Вот простой способ повторить звезду несколько раз (до некоторого известного максимума):
String stars = "*****".substring(0, n);