文字列内のすべての文字の組み合わせを取得する再帰的メソッドを書きました。再帰的メソッドはJavaでコンソールでは動作しますが、アンドロイドでは動作しません
これをJavaでテストすると、欠陥なしで実行されました。何らかの理由で、Androidで使用すると、リストには正しい数の要素が設定されますが、すべての要素は同じです。例えば、 "here"という単語の場合、 "eerh"で埋められたリストを返します。
文字列内のすべての文字の組み合わせを取得する再帰的メソッドを書きました。再帰的メソッドはJavaでコンソールでは動作しますが、アンドロイドでは動作しません
これをJavaでテストすると、欠陥なしで実行されました。何らかの理由で、Androidで使用すると、リストには正しい数の要素が設定されますが、すべての要素は同じです。例えば、 "here"という単語の場合、 "eerh"で埋められたリストを返します。
これは非常に奇妙なグリッチです(間違いなく再現性があります)。これに関するバグレポートを提出することをおすすめします。
ただし、これは一時的な回避策です。 .toString()
を使用する代わりに、何らかの理由で参照を再利用するように見えます(たとえ私が.substring(0)
としても)、すべてが更新されます。各繰り返しの後にリストを印刷すると、私の意味がわかります。
ここで私のハッキー/非効率的な解決策です。変更:
combos.add(s.toString());
...へ:
combos.add(s + "");
それらが操作されていないように、これは効果的に、配列に適切に文字列のクローン:
02-17 19:33:48.605: I/System.out(6502): [Combos]: [here, heer, hree, hree, here, heer, ehre, eher, erhe, ereh, eehr, eerh, rhee, rhee, rehe, reeh, rehe, reeh, ehre, eher, erhe, ereh, eehr, eerh]
私は肯定的ではないが、私は文字列clasからvalueOf()メソッドを考えるsも機能します。 StringBuilderの代わりにListを使用し、リストに文字を追加してString.valueOf(s.get(i))を試してみてください。その文字を文字列に変換する必要があります。なぜAndroidで動作しないのかわからないが、あなたのループを少し修正する必要があるかもしれない。助けてくれることを望む。
いいえ、 '.valueOf()'と同じ不具合。私は 'String.valueOf(StringBuilder)'は単にOPのコードと同じ 'StringBuilder.toString()'を返すと思います。 – Eric
'removeChar()'の定義は何ですか? – Eric
@エリック申し訳ありませんが、 – Wilson