web-dev-qa-db-ja.com

n反復文字の文字列を生成する最も簡単な方法は何ですか?

文字cと数値nが与えられた場合、cのn回の繰り返しで構成される文字列をどのように作成できますか?手動で行うのは面倒です。

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

確かに私のためにこれをすでに行っているいくつかの静的ライブラリ関数がありますか?

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

可能であれば、Apache Commonsの StringUtils を使用してください Lang

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

速度のペナルティを理解するために、Array.fillとStringBuilderの2つのバージョンをテストしました。

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

そして

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

使用する

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

(メイン関数のループはJITを開始することに注意してください)

結果は次のとおりです。

elapsed repeat  : 65899
elapsed repeatSB: 305171

巨大の違いです

4
Panayotis

これは、標準バイナリパワーアルゴリズムに基づくO(logN)メソッドです。

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

repsの負の値は空の文字列を返します。

1
rossum

このサンプルを見てください

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

答えは Javaで文字列を繰り返す簡単な方法 なので、投票してください

1

自分で追加するだけです...

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

またはApache commons には、追加できるユーティリティクラスがあります。

0
Mike Thomsen