在特定索引处的另一个列表中插入列表/数组

时间:2014-01-01 20:56:12

标签: java arrays string

我现在尝试了很多东西,但无法真正解决我的问题。 我有一个包含一些字符串的String-List,另一个包含其他字符串的String-List / Array。现在我想在第一个列表中的特定位置插入第二个列表。这里有一个小例子(带有问题的Peusdocode):

List<String> list1; //Contains, for example, "Hello", "Keyword", "Bye"
String[] stringarray = new String[]{"Blah1", "Blah2", "Blah3"};
for(String s : list1){
  if(s.contains("Keyword"){
    //here i need a method to replace the list item with "keyword" in it with the whole     other list, so that the final list will look like this: "Hello", "Blah1", "Blah2", Blah3", "Bye"
    list1.set(list1.indexOf(s), stringarray); // such a method would be incredible
  }
}

如何解决我的问题?

3 个答案:

答案 0 :(得分:3)

查看doc,您需要以下方法:

public boolean addAll(int index,
             Collection<? extends E> c)
  

将指定集合中的所有元素插入到此中   列表,从指定位置开始。目前转移元素   在该位置(如果有的话)和右边的任何后续元素   (增加他们的指数)。新元素将显示在列表中   它们由指定集合返回的顺序   迭代器。

所以我会做这样的事情:

List<String> list1 = new ArrayList<>(Arrays.asList("Hello", "Keyword", "Bye"));
String[] stringarray = new String[]{"Blah1", "Blah2", "Blah3"};
int index = list1.indexOf("Keyword"); //get the index of the keyword
if(index != -1){ //if it's different than -1, it means that the list contains the keyword
    list1.remove(index); //remove the keyword from the list
    list1.addAll(index, Arrays.asList(stringarray)); //insert the array in the list at the position where keyword was
}
System.out.println(list1);

输出:

[Hello, Blah1, Blah2, Blah3, Bye]

编辑

我误解了你的问题,但这个想法仍然是一样的。如果你想用包含关键字的每个单词替换所有元素,只需执行:

for(int i = 0; i < list1.size(); i++) {
    if(list1.get(i).contains("Keyword")){
        list1.remove(i); 
        list1.addAll(i, Arrays.asList(stringarray)); 
    }
}
System.out.println(list1);

答案 1 :(得分:2)

也许是这样的?

    String[] stringArray = new String[]{"Blah1", "Blah2", "Blah3"};
    List<String> arrayAsList = Arrays.asList(stringArray);
    List<String> original = new ArrayList<>();
    //Populate original

    if(original.contains("Keyword"){
         original.addAll(original.indexOf("Keyword"), arrayAsList);
    }

答案 2 :(得分:1)

请使用:

boolean addAll(int index,Collection<? extends E> c)

documentation中,您会找到更多信息。