2009-12-14 4 views
40

Je voudrais créer une fonction qui a la signature suivante:Peut-on initialiser une chaîne java avec un seul caractère répété à une longueur spécifique

public String createString(int length, char ch) 

Il doit retourner une chaîne de répétition des caractères du spécifié longueur.

Par exemple, si la longueur est de 5 et ch est « p » la valeur de retour doit être

ppppp 

Est-il possible de le faire sans mise en boucle jusqu'à ce qu'il soit la longueur requise?
Et sans aucune constante définie en externe?

+1

Il ne ressemble à un double question, mais les réponses ici sont beaucoup plus belles :) –

Répondre

80
char[] chars = new char[len]; 
Arrays.fill(chars, ch); 
String s = new String(chars); 
+1

Vraiment simple et utile. –

26

StringUtils.repeat(str, count) de commons-lang apache

+1

Parfait! Pourquoi écrire trois lignes quand vous pouvez écrire 1? – deGoot

+2

@deGoot, parce que vous avez besoin de la bibliothèque de tiers pour ce – zegoline

+0

que vous avez probablement déjà .. :) – Bozho

5

Pour mémoire, avec Java8 vous pouvez le faire avec des flux:

String p10times = IntStream.range(0, 10) 
    .mapToObj(x -> "p") 
    .collect(Collectors.joining()); 

Mais cela semble un peu exagéré.

+0

Upvoted pour la fraîcheur. –

+1

Pour éviter de générer et de rejeter les valeurs IntStream 'String p10Times = Stream.generate (() ->" p "). Limit (10) .collect (Collectors.joining());' – Jelaby

1

peu plus avance et lisible,

public static String repeat(int len, String ch) { 

     String s = IntStream.generate(() -> 1).limit(len).mapToObj(x -> ch).collect(Collectors.joining()); 
     System.out.println("s " + s); 
     return s;  
    }