it-swarm.com.de

Was ist der einfachste Weg, eine Zeichenfolge aus n wiederholten Zeichen zu generieren?

Wie kann ich mit einem Zeichen c und einer Zahl n einen String erstellen, der aus n Wiederholungen von c besteht? Manuell zu machen ist zu umständlich:

StringBuilder sb = new StringBuilder(n);
for (int i = 0; i < n; ++i)
{
    sb.append(c);
}
String result = sb.toString();

Sicherlich gibt es eine statische Bibliotheksfunktion, die dies für mich bereits tut?

25
foobar
int n = 10;
char[] chars = new char[n];
Arrays.fill(chars, 'c');
String result = new String(chars);
38
G_H

Wenn möglich, verwenden Sie StringUtils aus Apache Commons Lang :

StringUtils.repeat("ab", 3);  //"ababab"
22
14
Jeremy

Um eine Vorstellung von der Geschwindigkeitsstrafe zu bekommen, habe ich zwei Versionen getestet, eine mit Array.fill und eine mit StringBuilder.

public static String repeat(char what, int howmany) {
    char[] chars = new char[howmany];
    Arrays.fill(chars, what);
    return new String(chars);
}

und 

public static String repeatSB(char what, int howmany) {
    StringBuilder out = new StringBuilder(howmany);
    for (int i = 0; i < howmany; i++)
        out.append(what);
    return out.toString();
}

mit 

public static void main(String... args) {
    String res;
    long time;

    for (int j = 0; j < 1000; j++) {
        res = repeat(' ', 100000);
        res = repeatSB(' ', 100000);
    }
    time = System.nanoTime();
    res = repeat(' ', 100000);
    time = System.nanoTime() - time;
    System.out.println("elapsed repeat: " + time);

    time = System.nanoTime();
    res = repeatSB(' ', 100000);
    time = System.nanoTime() - time;
    System.out.println("elapsed repeatSB: " + time);
}

(Beachten Sie, dass die Schleife in der Hauptfunktion in JIT tritt.)

Die Ergebnisse sind wie folgt:

elapsed repeat  : 65899
elapsed repeatSB: 305171

Es ist ein großer Unterschied

4
Panayotis

Hier ist eine O(logN) Methode, die auf dem Standard-Binärleistungsalgorithmus basiert:

public static String repChar(char c, int reps) {
    String adder = Character.toString(c);
    String result = "";
    while (reps > 0) {
        if (reps % 2 == 1) {
            result += adder;
        }
        adder += adder;
        reps /= 2;
    }        
    return result;
}

Negative Werte für reps geben die leere Zeichenfolge zurück.

1
rossum

schauen Sie sich dieses Beispiel an

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

antwort-Formular Einfache Möglichkeit, einen String in Java zu wiederholen so abstimmen

1

Fügen Sie es einfach zu Ihren eigenen hinzu ...

public static String generateRepeatingString(char c, Integer n) {
    StringBuilder b = new StringBuilder();
    for (Integer x = 0; x < n; x++)
        b.append(c);
    return b.toString();
}

Oder Apache Commons hat eine Utility-Klasse, die Sie hinzufügen können.

0
Mike Thomsen