交换ArrayList中的元素

时间:2012-01-21 14:21:02

标签: java arraylist swap

我想编写一个方法,它接受一个String并交换其中的每对字符,然后将它们连接成一个新的String。请让我知道如何修复此代码(或写一个更好的代码):

    static String s;

    public static void proc(String w) {     
        ArrayList k = new ArrayList();
        ArrayList m = new ArrayList();
        System.out.println(w.length()); 
        int j = 0;
        //test arraylist to check if string is written into arraylist
        for (int i = 0; i < w.length(); i++){
            k.add(w.charAt(i));         
        }
        String p = k.get(2).toString();
        System.out.println(p);  

//here starts the logic of my app
        for (int n = 0; n < w.length(); n++){
            String v = k.get(n).toString();
            if (n == 0){
                m.add(1, v);
            }
            else if (n == 1){
                m.add(0, v);
            }
            else if ((n % 2) == 0){
                m.add(n+1, v);
            }
            else {
                m.add(n, v);
            }           
        }
    }

    public static void main(String[] args){
        s = "tests";
        proc(s);        
    }

嗨,这不是作业,而是从书中练习。无论如何使用Jon提供的代码设法独立工作 - 它可能不是那么优雅,但也使用动态大小调整来完成工作:

public static void proc(String w) {     

        ArrayList k = new ArrayList();
        ArrayList g = new ArrayList();
        String h = "";

        for (int i = 0; i < w.length(); i++){   
            char temp = w.charAt(i);
            k.add(i, temp);
        }
        for (int i = 0; i < w.length(); i++){
            if (i == 0){
                h = k.get(1).toString();
                g.add(h);
            }
            else if (i == 1){
                h = k.get(0).toString();
                g.add(h);
            }
            else if ((i % 2) == 0){

                h = k.get(i+1).toString();

                g.add(h);
            }
            else if ((i % 2) == 1){
                h = k.get(i-1).toString();
                g.add(h);
            }
        }
        System.out.println(g.toString());
    }
    public static void main(String[] args){
        s = "test";
        proc(s);
    }

2 个答案:

答案 0 :(得分:4)

我没有尝试完全了解您的代码是如何工作的,但它对我来说看起来不必要地复杂。鉴于您不需要动态调整大小,您可以使用数组更轻松地执行此操作:

public static String swapPairs(String input) {
    char[] chars = input.toCharArray();
    for (int i = 0; i < chars.length - 1; i += 2) {
        char tmp = chars[i];
        chars[i] = chars[i + 1];
        chars[i + 1] = tmp;
    }
    return new String(chars);
}

请注意,虽然这适用于“简单”字符(其中数组的每个元素独立于其余元素),但它不会尝试将任何形式的“复合”字符转换为考虑,例如由两个UTF-16代码单元(代理对)或诸如“e +急性重音”的组合字符形成的字符。进行这种上下文感知的交换需要付出更多的努力。

答案 1 :(得分:3)

这看起来像是家庭作业,所以我将答案限制在几个提示上。

  1. 我会将结果累积在StringBuilder中(后面跟着名为sb)。
  2. 我会有一个循环(for i = 0; i < w.length(); i += 2)。在这个循环中,我会做两件事:
    • 如果i + 1在字符串的范围内,我会将i + 1个字符附加到sb;
    • i个字符附加到sb
  3. 最后,请致电sb.toString()