是否有一种简单的方法可以将字符或其他字符串n次添加到现有字符串中?
我在String
,Stringbuilder
等
答案 0 :(得分:36)
Apache commons-lang3
有StringUtils.repeat(String, int)
,您可以这样做(为简单起见,而不是StringBuilder
):
String original;
original = original + StringUtils.repeat("x", n);
由于它是开源的,您可以阅读它的编写方式。如果我没记错的话,小n-s有一个小的优化,但大部分时间它使用StringBuilder
。
答案 1 :(得分:24)
对于重复单个字符(不是字符串)的情况,您可以使用Arrays.fill:
String original = "original ";
char c = 'c';
int number = 9;
char[] repeat = new char[number];
Arrays.fill(repeat, c);
original += new String(repeat);
答案 2 :(得分:21)
您可以使用Java 8流API执行此操作。以下代码从"cccc"
创建字符串"c"
:
String s = "c";
int n = 4;
String sRepeated = IntStream.range(0, n).mapToObj(i -> s).collect(Collectors.joining(""));
答案 3 :(得分:15)
对于Java 8,您可以这样做:
int n = 4;
String existing = "...";
String result = existing + String.join("", Collections.nCopies(n, "*"));
输出:
...****
在Java 8中添加了String.join
方法。但Collections.nCopies
甚至在Java 5中也是如此。
答案 4 :(得分:11)
使用此:
String input = "original";
String newStr = "new"; //new string to be added
int n = 10 // no of times we want to add
input = input + new String(new char[n]).replace("\0", newStr);
答案 5 :(得分:10)
您可以使用Guava的Strings.repeat方法:
String existingString = ...
existingString += Strings.repeat("foo", n);
答案 6 :(得分:4)
最好使用StringBuilder
而不是String
,因为String是一个不可变类,一旦创建就无法修改:在String中,每个连接都会导致创建一个String类的新实例并修改字符串。
答案 7 :(得分:3)
for(int i = 0; i < n; i++) {
existing_string += 'c';
}
但你应该使用StringBuilder,并节省内存
int n = 3;
String existing_string = "string";
StringBuilder builder = new StringBuilder(existing_string);
for (int i = 0; i < n; i++) {
builder.append(" append ");
}
System.out.println(builder.toString());
答案 8 :(得分:2)
除了上述答案之外,您还应该使用适当的容量初始化StringBuilder
,尤其是您已经知道的容量。例如:
int capacity = existingString.length() + n * appendableString.length();
StringBuilder builder = new StringBuilder(capacity);
答案 9 :(得分:1)
public String appendNewStringToExisting(String exisitingString, String newString, int number) {
StringBuilder builder = new StringBuilder(exisitingString);
for(int iDx = 0; iDx < number; iDx++){
builder.append(newString);
}
return builder.toString();
}
答案 10 :(得分:1)
String toAdd = "toAdd";
StringBuilder s = new StringBuilder();
for(int count = 0; count < MAX; count++) {
s.append(toAdd);
}
String output = s.toString();
答案 11 :(得分:0)
请记住,如果&#34; n&#34;很大,使用+ =可能不是一个好主意,因为每次通过+ =添加另一个String时,JVM都会创建一个全新的对象(关于此的大量信息)。
类似的东西:
StringBuilder b = new StringBuilder(existing_string);
for(int i = 0; i<n; i++){
b.append("other_string");
}
return b.toString();
实际上并没有在IDE中对此进行编码,因此可能会出现轻微的缺陷,但这是基本的想法。
答案 12 :(得分:0)
我是怎么做到的:
final int numberOfSpaces = 22;
final char[] spaceArray = new char[numberOfSpaces];
Arrays.fill(spaces, ' ');
现在将其添加到您的StringBuilder
stringBuilder.append(spaceArray);
或String
final String spaces = String.valueOf(spaceArray);
答案 13 :(得分:0)
为了了解速度惩罚,我测试了两个版本,一个是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
巨大的差异
答案 14 :(得分:-1)
这是一个简单的方法..
for(int i=0;i<n;i++)
{
yourString = yourString + "what you want to append continiously";
}