Question Façon simple de répéter une chaîne en Java


Je suis à la recherche d'une méthode simple ou d'un opérateur qui me permet de répéter certaines chaînes n fois. Je sais que je pourrais écrire ceci en utilisant une boucle for, mais je souhaite éviter les boucles chaque fois que nécessaire et une méthode directe simple devrait exister quelque part.

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

repeated.equals("abcabcabc");

Relatif à:

répéter la chaîne javascript Créer NSString en répétant une autre chaîne un nombre de fois donné

Édité

J'essaie d'éviter les boucles quand elles ne sont pas complètement nécessaires car:

  1. Ils ajoutent au nombre de lignes de code même s’ils sont rangés dans une autre fonction.

  2. Quelqu'un lisant mon code doit comprendre ce que je fais dans cette boucle. Même s'il est commenté et a des noms de variables significatifs, ils doivent toujours s'assurer qu'il ne fait rien de "intelligent".

  3. Les programmeurs adorent mettre des choses intelligentes dans les boucles, même si je les écris pour «faire ce que l'on veut faire», cela n'empêche pas quelqu'un de venir et d'ajouter une «correction» intelligente supplémentaire.

  4. Ils sont très souvent faciles à se tromper. Pour les boucles impliquant des index ont tendance à générer par un bogue.

  5. Car les boucles réutilisent souvent les mêmes variables, ce qui augmente les chances de trouver des bogues difficiles à trouver.

  6. Car les boucles augmentent le nombre de lieux qu'un chasseur de bogues doit regarder.


415
2017-08-05 19:14


origine


Réponses:


À partir de Java 11, il y a une méthode String::repeat c'est exactement ce que vous avez demandé:

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

Son Javadoc dit:

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

35
2018-03-02 08:31



Voici la version la plus courte (Java 1.5+ requis):

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

n est le nombre de fois que vous voulez répéter la chaîne et s est la chaîne à répéter.

Aucune importation ou bibliothèque requise.


737
2018-02-04 22:34



Commons Lang StringUtils.repeat ()

Usage:

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

repeated.equals("abcabcabc");

265
2017-08-05 19:16



En Java 8 et au-dessus il y a un moyen facile:

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

Sinon, c'est aussi simple que ça:

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

178
2017-07-28 11:05



Java 8 String.join fournit une façon ordonnée de le faire en conjonction avec Collections.nCopies:

// say hello 100 times
System.out.println(String.join("", Collections.nCopies(100, "hello")));

121
2017-07-25 00:17



Voici un moyen de le faire en utilisant uniquement des fonctions String standard et pas de boucles explicites:

// create a string made up of  n  copies of  s
repeated = String.format(String.format("%%%ds", n), " ").replace(" ",s);

97
2017-08-22 18:05



Si vous êtes comme moi et que vous voulez utiliser Google Goyave et non Apache Commons. Vous pouvez utiliser le répéter méthode dans la classe Guava Strings.

Strings.repeat("-", 60);

76
2018-05-20 23:33