2015-09-27 4 views
-2

Я хочу инвертировать каждый символ моей строки и возвращать каждый результат в 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] 
+4

Что делает '[ABC, BAC, ACB]' предпочтительную над '[азбука, BAC, BCA]'? Я не знаю, что вы подразумеваете под «обратным». –

+1

Я не понимаю, чего хочет OP. – user3437460

+0

Я просто хочу переключить string.charAt (i) с i + 1. – kakame91

ответ

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 
^^  ^^ 
+1

Хорошо работать! Он работает – kakame91

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; 
} 
+0

Делает ли это bac или acb ...? –

+1

@JaroslawPawlak Он вернется '[abc, bca, cab]'. Возможно, я ошибаюсь, но я подозреваю, что это может быть то, что хотел OP. – Pshemo

+0

Согласитесь с вами, я не знаю, если OP хочет поменять символ или «перевернуть» строку +1 @Pshemo – maskacovnik

Смежные вопросы