実装にバグがあるか、StringBuilder
が間違っているか分かりません。 stackoverflowから、私はJava Strings
が不変であることを知りました。現在私はStringBuilder
を使用して再帰的な方法でいくつかの文字列処理を行っています。再帰をより明確かつ分かりやすくするために、Queue
を使用してStringBuilder
を保存しています。同じ処理がString
で実行できますが、実行時間が長くなるため、StringBuilder
を使用しています。入力文字列は、最初にStringBuilder
に変換され、その後、forループが文字と一致し、部分文字列をchar
に置き換えた後にQueue
に追加されます。この結果はStringBUilder
がQueue
に加えられる。次に、要素(StringBuilder
)がQueue
から削除され、前と同じ方法でforループで処理されます。このプロセスは、Queue
が空になるまで繰り返されます。以下は、私のコードは、これは私にStringIndexOutOfBoundsException
を与えるsnippet-再帰で使用しているときにStringBuilderが異常に動作しています
Queue<StringBuilder> q = new LinkedList<StringBuilder>();
StringBuilder sb;
q.add(new StringBuilder("abcccc"));
while ((sb = q.poll()) != null) {
int len = sb.length();
for (int i = 0; i < len - 1; i++) {
/*
* Here i am matching charAt(i) with charAt(i+1) and based on
* the characters matching decision is done
*/
StringBuilder rep = new StringBuilder(len - 1);
rep = sb;
rep.replace(i, i + 2, replace);//replace is a string which is a character
q.add(rep);
}
}
です。しかし、元のStringBuilder
の内容は変更されていません。これはsbです。私はちょうどのコピーを作成しています。それはrep
です。そして、これを新しく作成した内容の置き換えます。StringBuilder
あなたは 'ことを破棄している新しいのStringBuilder()':あなたはコピーをしたい場合
、初期値として文字列を受け取りStringBuilderのコンストラクタを使用します'rep'。 – Patrick