Могу ли я умножить строки в Java для повторения последовательностей?

У меня есть что-то вроде следующего:

int i = 3;
String someNum = "123";

Я хотел бы добавить i "0" в someNum строка. Есть ли способ, которым я могу умножить строку, чтобы повторить это, как это делает Python?

Так что я мог бы просто пойти:

someNum = sumNum + ("0" * 3);

или что-то подобное?

Где, в этом случае, мой конечный результат будет:

"123000".

19 ответов

Самым простым способом в простой Java без зависимостей является следующий однострочный:

new String(new char[generation]).replace("\0", "-")

Замените генерацию числом повторений, а "-" на строку (или символ), которую вы хотите повторить.

Все, что это делает, это создает пустую строку, содержащую n чисел 0x00 символов, а встроенный метод String#replace делает все остальное.

Вот пример для копирования и вставки:

public static String repeat(int count, String with) {
    return new String(new char[count]).replace("\0", with);
}

public static String repeat(int count) {
    return repeat(count, " ");
}

public static void main(String[] args) {
    for (int n = 0; n < 10; n++) {
        System.out.println(repeat(n) + " Hello");
    }

    for (int n = 0; n < 10; n++) {
        System.out.println(repeat(n, ":-) ") + " Hello");
    }
}

Используя Java11 (текущий в фазе раннего доступа), вы можете достичь того же, используя String.repeat API следующим образом:

int i = 3; //frequency to repeat
String someNum = "123"; // initial string
String ch = "0"; // character to append

someNum = someNum + ch.repeat(i); // formulation of the string
System.out.println(someNum); // would result in output -- "123000"

Нет, но вы можете в Скала! (А затем скомпилируйте это и запустите, используя любую реализацию Java!!!!)

Теперь, если вы хотите сделать это простым способом в Java, используйте пакет Apache commons-lang. Предполагая, что вы используете maven, добавьте эту зависимость в ваш pom.xml:

    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.4</version>
    </dependency>

А затем используйте StringUtils.repeat следующим образом:

import org.apache.commons.lang.StringUtils
...
someNum = sumNum + StringUtils.repeat("0", 3);

Google Guava предоставляет еще один способ сделать это с Strings#repeat():

String repeated = Strings.repeat("pete and re", 42);

На ум приходит два способа:

int i = 3;
String someNum = "123";

// Way 1:
char[] zeroes1 = new char[i];
Arrays.fill(zeroes1, '0');
String newNum1 = someNum + new String(zeroes1);
System.out.println(newNum1); // 123000

// Way 2:
String zeroes2 = String.format("%0" + i + "d", 0);
String newNum2 = someNum + zeroes2;
System.out.println(newNum2); // 123000

Способ 2 может быть сокращен до:

someNum += String.format("%0" + i + "d", 0);
System.out.println(someNum); // 123000

Больше о String#format() доступен в его API документации и один из java.util.Formatter,

Если вы повторяете отдельные символы, такие как OP, и максимальное количество повторений не слишком велико, то вы можете использовать простую операцию подстроки, например:

int i = 3;
String someNum = "123";
someNum += "00000000000000000000".substring(0, i);

Простой способ сделать это.

private String repeatString(String s,int count){
    StringBuilder r = new StringBuilder();
    for (int i = 0; i < count; i++) {
        r.append(s);
    }
    return r.toString();
}

Нет. Java не имеет этой функции. Вы должны создать свою строку, используя StringBuilder и какой-то цикл.

Java 8 предоставляет способ (хотя и немного неуклюжий). Как метод:

public static String repeat(String s, int n) {
    return Stream.generate(() -> s).limit(n).collect(Collectors.joining(""));
}

или менее эффективно, но ИМХО выглядит лучше

public static String repeat(String s, int n) {
    return Stream.generate(() -> s).limit(n).reduce((a, b) -> a + b);
}

Я создал метод, который делает то же самое, что вы хотите, не стесняйтесь попробовать это:

public String repeat(String s, int count) {
    return count > 0 ? s + repeat(s, --count) : "";
}

С долларом:

String s = "123" + $("0").repeat(3); // 123000

Я не верю, что Java изначально предоставляет эту функцию, хотя было бы неплохо. Я иногда пишу код Perl и x Оператор в Perl очень удобен для повторения строк!

тем не мение StringUtils в commons-lang предоставляет эту функцию. Метод называется repeat(), Ваш единственный вариант - создать его вручную с помощью цикла.

С гуавой:

Joiner.on("").join(Collections.nCopies(i, someNum));

Нет, ты не можешь. Однако вы можете использовать эту функцию, чтобы повторить символ.

public String repeat(char c, int times){
    StringBuffer b = new StringBuffer();

    for(int i=0;i &lt; times;i++){
        b.append(c);
    }

    return b.toString();
}

Отказ от ответственности: я напечатал это здесь. Могут быть ошибки.

Подобно тому, что уже было сказано:

public String multStuff(String first, String toAdd, int amount) { 
    String append = "";
    for (int i = 1; i <= amount; i++) {
        append += toAdd;               
    }
    return first + append;
}

вход multStuff("123", "0", 3);

Выход "123000"

Обобщение ответа Дэйва Хартнолла (я в основном воспринимаю концепцию до абсурда, возможно, не используйте это ни в чем, где вам нужна скорость). Это позволяет заполнить строку символами i, следуя заданному шаблону.

int i = 3;
String someNum = "123";
String pattern = "789";
someNum += "00000000000000000000".replaceAll("0",pattern).substring(0, i);

Если вам не нужен шаблон, а просто какой-либо отдельный символ, вы можете использовать его (это немного быстрее):

int i = 3;
String someNum = "123";
char c = "7";
someNum += "00000000000000000000".replaceAll("0",c).substring(0, i);

Мы можем создать несколько строк, используя * в Python, но не в Java, вы можете использовать для цикла в вашем случае:

String sample="123";
for(int i=0;i<3;i++)
{
sample=+"0";
}

Там нет ярлыка для выполнения этого в Java, как пример, который вы дали в Python.

Вы должны сделать это:

for (;i > 0; i--) {
    somenum = somenum + "0";
}

Самый простой способ это:

String someNum = "123000";
System.out.println(someNum);
Другие вопросы по тегам