¿Puedo multiplicar cadenas en Java para repetir secuencias?

Tengo algo como lo siguiente:

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

Me gustaría agregar i “0” s a la cadena someNum . ¿Tiene alguna forma de multiplicar una cadena para repetirla, como lo hace Python?

Así que podría ir:

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

¿o algo similar?

Donde, en este caso, mi resultado final sería:

“123000”.

La forma más fácil en Java simple sin dependencias es el siguiente delineador:

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

Reemplace generación con número de repeticiones, y “-” con la cadena (o char) que desea repetir.

Todo lo que hace es crear una cadena vacía que contiene un número n de 0x00 caracteres, y el método integrado de reemplazo de cadena hace el rest.

Aquí hay una muestra para copiar y pegar:

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

No, pero puedes en Scala! (Y luego comstackr eso y ejecutarlo usando cualquier implementación de Java !!!!)

Ahora, si quieres hacerlo de la manera más fácil en Java, utiliza el paquete Apache commons-lang. Suponiendo que está utilizando maven, agregue esta dependencia a su pom.xml:

   commons-lang commons-lang 2.4  

Y luego use StringUtils.repeat de la siguiente manera:

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

Google Guava proporciona otra forma de hacer esto con Strings#repeat() :

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

Dos maneras vienen a la mente:

 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 

La forma 2 se puede acortar a:

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

Más información sobre String#format() está disponible en su API doc y la de java.util.Formatter .

Si está repitiendo caracteres individuales como el OP, y el número máximo de repeticiones no es demasiado alto, entonces podría usar una operación de subcadena simple como esta:

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

No. Java no tiene esta característica. Tendría que crear su String usando un StringBuilder , y un bucle de algún tipo.

Manera simple de hacer esto.

 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 8 proporciona una forma (aunque un poco torpe). Como un método:

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

o menos eficiente, pero más agradable en mi humilde opinión:

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

con Dollar :

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

Con Guava :

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

No creo que Java proporcione esta característica de manera nativa, aunque sería bueno. ¡Escribo código Perl ocasionalmente y el operador x en Perl es muy útil para repetir cadenas!

Sin embargo, StringUtils en commons-lang proporciona esta característica. El método se llama repeat() . Su única otra opción es construirlo manualmente utilizando un bucle.

No, no puedes. Sin embargo, puedes usar esta función para repetir un personaje.

 public String repeat(char c, int times){ StringBuffer b = new StringBuffer(); for(int i=0;i < times;i++){ b.append(c); } return b.toString(); } 

Descargo de responsabilidad: lo escribí aquí. Podría tener errores.

Una generalización de la respuesta de Dave Hartnoll (estoy principalmente tomando el concepto ad absurdum, tal vez no use eso en cualquier cosa donde necesite velocidad). Esto le permite a uno llenar la Cadena con i caracteres siguiendo un patrón dado.

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

Si no necesitas un patrón, sino solo un solo carácter, puedes usarlo (es un poco más rápido):

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

Similar a lo que ya se ha dicho:

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

Entrada multStuff("123", "0", 3);

Salida "123000"

Creé un método que hace lo mismo que desea, no dude en probar esto:

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

Usando Java11 (actual en la fase de acceso temprano ), puede lograr lo mismo utilizando la API String.repeat siguiente manera:

 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" 

podemos crear cadenas de multiplicar usando * en python pero no en java que puede usar para el bucle en su caso:

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

No hay atajos para hacer esto en Java como el ejemplo que dio en Python.

Tendría que hacer esto:

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

La forma más simple es:

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