反转字符串中的所有字符

时间:2015-09-27 18:53:48

标签: java

我想反转我的字符串的每个字符并将每个结果返回到ArrayList中。这是我的代码:

public static ArrayList<String> allInv(String word) {
    ArrayList<String> ListMotsInverse = new ArrayList<String>();
    ListMotsInverse.add(word);
    StringBuilder newWord = new StringBuilder(word);
    for(int i = 0; i<word.length()-1; i++){
        char l = newWord.charAt(i);char r = newWord.charAt(i+1);
        newWord.setCharAt(i, r);
        newWord.setCharAt(i+1, l);
        System.out.println(newWord);
        ListMotsInverse.add(newWord.toString());
    }
    return ListMotsInverse;
}

我的结果:

 ArrayList<String> resInv = allInv("abc");
 System.out.println(resInv);
 [abc, bac, bca]

但我想要这个结果:

 [abc, bac, acb]

2 个答案:

答案 0 :(得分:4)

假设您的意思是获得像[abc, bca, cab]这样的结果,其中一种简单的方法就是创建另一个字符串,它将复制您想要的原始字符串和子字符串元素:

abcabc
^^^
 ^^^
  ^^^

public static List<String> allInv(String word) {
    List<String> ListMotsInverse = new ArrayList<String>();
    String text = word+word;
    for (int i=0; i<word.length(); i++){
        ListMotsInverse.add(text.substring(i,i+3));
    }
    return ListMotsInverse;
}

答案 1 :(得分:2)

您应该将缓冲区重置为原始状态:

public static ArrayList<String> allInv(String word) {
    ArrayList<String> ListMotsInverse = new ArrayList<String>();
    ListMotsInverse.add(word);
    StringBuilder newWord = new StringBuilder(word);
    for(int i = 0; i<word.length()-1; i++){
        char l = newWord.charAt(i);char r = newWord.charAt(i+1);
        newWord.setCharAt(i, r);
        newWord.setCharAt(i+1, l);
        System.out.println(newWord);
        ListMotsInverse.add(newWord.toString());

        //reset to original state
        newWord.setCharAt(i, l);
        newWord.setCharAt(i+1, r);
    }
    return ListMotsInverse;
}

在您的情况下,您将切换两个字符:

abc -> bac
^^     ^^

但没有重置,所以它会:

bac -> bca
 ^^     ^^

你期待:

abc -> acb
 ^^     ^^