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

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

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

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

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

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

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

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

"123000".

Ответ 1

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

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

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

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

Здесь образец для копирования и вставки:

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

Ответ 2

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

Теперь, если вы хотите сделать это простым способом в java, используйте пакет Apost 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);

Ответ 3

Google Guava предоставляет другой способ сделать это с помощью Strings#repeat():

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

Ответ 4

Приходят в голову два способа:

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.

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

или менее эффективный, но лучше выглядящий IMHO:

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

Ответ 8

с Dollar:

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

Ответ 9

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

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

Ответ 10

С Guava:

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

Ответ 11

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

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

Ответ 12

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

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

Отказ от ответственности: я набрал его здесь. Возможны ошибки.

Ответ 13

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

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

Ответ 14

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

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"

Ответ 15

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

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

Ответ 16

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

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

Ответ 17

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

Вам нужно будет сделать это:

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

Ответ 18

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

String someNum = "123000";
System.out.println(someNum);