文字列内の文字から可能なすべての文字の組み合わせを取得する再帰的なメソッドを作成しました。それにアクセスしてコンボのリストを返すメソッドもあります。
public static void uns(String word, StringBuilder s, List combos)
{
for(char c: word.toCharArray())
{
s.append(c);
if(word.length() != 1)
{
uns(removeChar(word, c),s,combos);
}
else
{
combos.add(s.toString());
}
s.deleteCharAt(s.toString().length()-1);
}
}
public static List getCombinations(String word)
{
List<String> combinations = new ArrayList<String>();
uns(word,new StringBuilder(),combinations);
return combinations;
}
public static String removeChar(String s, char c)
{
int index = s.indexOf(c);
return s.substring(0,index)+s.substring(index+1);
}
Java でテストしたところ、問題なく動作しました。何らかの理由で、Android で使用すると、リストには正しい数の要素が入力されますが、すべての要素は同じです。たとえば、「here」という単語の場合、「eerh」で満たされたリストが返されます。