Ответ 1
int n = 10;
char[] chars = new char[n];
Arrays.fill(chars, 'c');
String result = new String(chars);
С учетом символа c и числа n, как я могу создать строку, состоящую из n повторений c? Выполнение этого вручную слишком громоздко:
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);
Если вы можете, используйте StringUtils из Apache Commons Lang:
StringUtils.repeat("ab", 3); //"ababab"
Время в Гуаве!
Strings.repeat("a", 3)
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Strings.html
Для чего стоит, если ваш персонаж является пространством (для создания пробела):
String spacePad(int n) {
return (n == 0 ? "" : String.format("%"+n+"s", " "));
}
Чтобы получить представление об ограничении скорости, я протестировал две версии: одну с Array.fill и одну с StringBuilder.
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);
answer made form Простой способ повторить строку в 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 есть класс утилиты, который вы можете добавить.
string result = new StringBuilder().Append('c', n).ToString();