用Java复制字符串

时间:2014-11-25 03:03:13

标签: java string arraylist copy

有没有一种在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而不是返回一个新的。我太笨了。

2 个答案:

答案 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;
}