有没有一种在Java中复制字符串的好方法?我知道我可以做一些串联黑客,但我想知道是否有一个更优雅的解决方案。
我希望将ArrayList中的每个字符串复制一定次数。但是,数组列表似乎不允许多次使用同一个对象。我正在寻找复制字符串的方法,以便我可以将它添加到ArrayList。
public class MyClass {
ArrayList<String> myArrayList;
/*more code*/
public ArrayList<String> duplicate(int timesToCopy) {
ArrayList<String> newArrayList = new ArrayList<>();
for(String s: myArrayList) { //cycles through all strings
for(int i = 1; i <= timesToCopy; i++) { //adds them timesToCopy amount of times
newArrayList.add(s); //doesn't work, only adds it once
}
}
return newArrayList;
}
}
如果我输入一个值为{&#34; cat&#34;,&#34; dog&#34;}的ArrayList,因为我称之为复制(3),我应该得到{&#34; cat&#34;, &#34; cat&#34;,&#34; cat&#34;,&#34; dog&#34;,&#34; dog&#34;,&#34; dog&#34;}
但相反,我得到{&#34; cat&#34;,&#34; dog&#34;}。
我试过替换
newArrayList.add(s);
与
newArrayList.add(new String(s));
但它仍然无法运作。
也许我的代码的另一部分有错误?
编辑:
好的,我不知道发生了什么,但在我没有做任何事之后,它以某种方式起作用。
编辑2:
好的,问题又出现了。但是,我想出了问题!我正在调用duplicate(3),就像它是一个void函数一样,认为它会改变实例的ArrayList而不是返回一个新的。我太笨了。
答案 0 :(得分:1)
我不确定你是如何调用你的方法的,但我会像这样传递输入List
public static List<String> duplicate(List<String> al, int n) {
List<String> ret = new ArrayList<>();
for (String s : al) {
for (int i = 0; i < n; i++) {
ret.add(s);
}
}
return ret;
}
public static void main(String[] args) {
System.out.println(duplicate(Arrays.asList("dog", "cat"), 3));
}
输出(按要求)
[dog, dog, dog, cat, cat, cat]
答案 1 :(得分:0)
您可以使用java.util.Collections.nCopies
,即传递给它的对象的 N份:
public static ArrayList<String> duplicate(List<String> myArrayList, int timesToCopy) {
ArrayList<String> newArrayList = new ArrayList<>();
for(String s: myArrayList) { //cycles through all strings
newArrayList.addAll( Collections.nCopies(timesToCopy, s));
}
return newArrayList;
}