Я не знаю, есть ли в моей реализации ошибки или StringBuilder
работает неправильно.Из stackoverflow я узнал, что Java Strings
неизменны.В настоящее время я выполняю некоторую обработку строк рекурсивным способом, используя StringBuilder
.Чтобы сделать рекурсию более ясной и понятной, я использую Queue
для хранения StringBuilder
.Такую же обработку можно выполнить с String
с, но это увеличит время выполнения, поэтому я использую StringBuilder
.Входная строка сначала преобразуется в StringBuilder
, затем добавляется в Queue
, после чего цикл for сопоставляет ее символ и заменяет подстроку на char
.Этот результат StringBUilder
добавляется к Queue
.Затем элемент (StringBuilder
) удаляется из Queue
и обрабатывается с помощью цикла for тем же самым предыдущим способом.Этот процесс повторяется до тех пор, пока Queue
не станет пустым.Ниже приведен фрагмент моего кода -
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);
}
}
Это дает мне StringIndexOutOfBoundsException
.Однако я не изменяю содержание оригинального StringBuilder
, который является sb.Я просто создаю копию sb
, которая является rep
, а затем заменяю содержимое этого недавно созданного StringBuilder
.