我想反转我的字符串的每个字符并将每个结果返回到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]
答案 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
^^ ^^