在Arraylist java中交换字符串位置

时间:2015-06-16 05:29:11

标签: java arraylist

我有一句话:Humpty Dumpty坐在墙上。 我希望字符串能够交换位置:坐在墙上的Dumpty Humpty a。

所以我写的代码如下:

import java.util.*;
public class Swap{
public static void main(String []args) {
    ArrayList<String> sentence = new ArrayList<String>();
    sentence.add("Humpty");
    sentence.add("Dumpty");
    sentence.add("sat");
    sentence.add("on");
    sentence.add("a");
    sentence.add("wall");

    int size = sentence.size() ; // for finding size of array list
    int numb ; 

    if(size%2 == 0) {
        numb = 1;
    }
    else {
        numb = 0;
    }

    ArrayList<String> newSentence = new ArrayList<String>();

    if(numb == 1) {
        for(int i = 0; i <= size ; i = i+2) {
            String item = sentence.get(i);
            newSentence.add(i+1, item);
        }

        for(int i =  1; i<=size ; i = i+2) {
            String item2 = sentence.get(i);
            newSentence.add(i-1, item2);
        }


        System.out.println(newSentence);
    }

    else {
        System.out.println(sentence);
    }

    }
}

代码正在编译正确但是当我运行它时,它给出了一个错误。 我对此的理解是,我在数组列表中添加字符串,在其间留下位置。就像在位置3处添加而不首先填充位置2一样。我该如何克服这个问题?

3 个答案:

答案 0 :(得分:2)

您正确地解决了您的问题 - 在插入元素之前(在索引0处),您尝试将元素插入到索引1中,并获得IndexOutOfBoundsException

如果您想使用现有代码来完成此任务,只需使用一个循环:

if(numb == 1) {
    for(int i = 0; i < size-1 ; i = i+2) {
        String item = sentence.get(i+1);
        newSentence.add(i, item);
        item = sentence.get(i);
        newSentence.add(i+1, item);
    }
}

如果您希望使用Java的内置函数更加复杂,可以使用swap

for(int i = 0; i < size-1 ; i = i+2) {
    Collections.swap(sentence, i, i+1);
}

System.out.println(sentence);

答案 1 :(得分:0)

您可以使用

初始化newSentence
ArrayList<String> newSentence = new ArrayList<String>(Collections.nCopies(size, ""));

这样,您就可以访问/跳过0size之间的任何位置。因此,您可以保留其余的代码。

记住所有索引都在这里填充空字符串。

答案 2 :(得分:0)

那是因为:

for(int i = 0; i <= size ; i = i+2) {
            String item = sentence.get(i);
            newSentence.add(i+1, item);//Here you will face java.lang.IndexOutOfBoundsException
        }

        for(int i =  1; i<=size ; i = i+2) {
            String item2 = sentence.get(i);
            newSentence.add(i-1, item2);//Here you will face java.lang.IndexOutOfBoundsException
        }

而不是这个,请尝试以下代码:

if(numb == 1) {
         for(int i = 0; i < size-1 ; i +=2) {
              Collections.swap(sentence, i, i+1);
         }

}