文字cと数値nが与えられた場合、cのn回の繰り返しで構成される文字列をどのように作成できますか?手動で行うのは面倒です。
StringBuilder sb = new StringBuilder(n);
for (int i = 0; i < n; ++i)
{
sb.append(c);
}
String result = sb.toString();
確かに私のためにこれをすでに行っているいくつかの静的ライブラリ関数がありますか?
int n = 10;
char[] chars = new char[n];
Arrays.fill(chars, 'c');
String result = new String(chars);
可能であれば、Apache Commonsの StringUtils を使用してください Lang :
StringUtils.repeat("ab", 3); //"ababab"
グアバ時間!
Strings.repeat("a", 3)
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Strings.html
速度のペナルティを理解するために、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
巨大の違いです
これは、標準バイナリパワーアルゴリズムに基づく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
の負の値は空の文字列を返します。
このサンプルを見てください
Integer n=10;
String s="a";
String repeated = new String(new char[n]).replace("\0", s);
答えは Javaで文字列を繰り返す簡単な方法 なので、投票してください
自分で追加するだけです...
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 には、追加できるユーティリティクラスがあります。