foo*_*bar 26 java string character
给定一个字符c和一个数字n,如何创建一个由n次重复c组成的字符串?手动操作太麻烦了:
StringBuilder sb = new StringBuilder(n);
for (int i = 0; i < n; ++i)
{
sb.append(c);
}
String result = sb.toString();
Run Code Online (Sandbox Code Playgroud)
当然有一些静态库函数已经为我做了这个吗?
G_H*_*G_H 39
int n = 10;
char[] chars = new char[n];
Arrays.fill(chars, 'c');
String result = new String(chars);
Run Code Online (Sandbox Code Playgroud)
Tom*_*icz 22
如果可以,请使用Apache Commons Lang的StringUtils:
StringUtils.repeat("ab", 3); //"ababab"
Run Code Online (Sandbox Code Playgroud)
Jer*_*emy 15
谷歌番石榴时间!
Strings.repeat("a", 3)
Run Code Online (Sandbox Code Playgroud)
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Strings.html
为了了解速度损失,我测试了两个版本,一个使用 Array.fill,一个使用 StringBuilder。
public static String repeat(char what, int howmany) {
char[] chars = new char[howmany];
Arrays.fill(chars, what);
return new String(chars);
}
Run Code Online (Sandbox Code Playgroud)
和
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();
}
Run Code Online (Sandbox Code Playgroud)
使用
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);
}
Run Code Online (Sandbox Code Playgroud)
(注意 main 函数中的循环是启动 JIT)
结果如下:
elapsed repeat : 65899
elapsed repeatSB: 305171
Run Code Online (Sandbox Code Playgroud)
这是一个巨大的差异
String#repeat\xe2\x80\x8b(int count)作为 Java SE 11 的一部分引入,使其变得非常容易做到。
演示:
\npublic class Main {\n public static void main(String[] args) {\n char ch = \'c\';\n int n = 20;\n String result = String.valueOf(ch).repeat(n);\n System.out.println(result);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n输出:
\ncccccccccccccccccccc\nRun Code Online (Sandbox Code Playgroud)\n