Часть моего задания - создать метод, который заменяет все вхождения строки 2, которые встречаются в строке 1, строкой 3. Поэтому, если бы предложение было: «собака перепрыгнула через забор», я бы хотел метод для замены всех вхождений любой строки 2, которая, скажем, «the», с содержанием строки 3, которая, скажем, «this».
Так что я бы хотел сказать, что «эта собака перепрыгнула через забор».
Это действительно легко, если мой учитель-профессор допустил более удобный способ, но весь этот курс просто неудобен, когда речь идет об обучении, поэтому я ДОЛЖЕН использовать объект StringBuilder.
Пока мой код для replaceSubstring () равен
public static String replaceSubstring(String str1, String str2, String str3)
{
String str1Copy = str1, str2Copy = str2, str3Copy = str3;
if (str2Copy.equals(str3Copy))
{
return str1Copy;
}
StringBuilder b = new StringBuilder(str1Copy);
int index = b.indexOf(str2Copy);
b.replace(index, (index + str2Copy.length()), str3Copy);
index = b.indexOf(str3Copy);
return b.toString();
}
Однако я столкнулся с проблемой, потому что, когда я запускаю этот код в классе приложения, который печатает инструкцию возврата этого метода, я получаю
After replacing "the" with "that", the string: that dog jumped over the fence
В моей консоли. Исходная строка - «собака прыгнула через забор», и мой код должен изменить ее на «эта собака прыгнула через забор», однако она просто меняет первое вхождение «», а не второе. Я действительно ломаю голову над этим, потому что я понимаю, как я мог просто сделать что-то вроде
return string1.replaceAll(string2, string3);
И назовите это днем, но я бы потерял очки за то, что не сделал этого так, как этого хочет мой профессор, то есть с помощью объекта StringBuilder. Что мне здесь не хватает? Также я не могу импортировать пакеты, созданные кем-то другим. Я должен использовать общий и базовый комплект Java.
РЕДАКТИРОВАТЬ: новый код, кажется, работает
public static String replaceSubstring(String str1, String str2, String str3)
{
String str1Copy = new String (str1), str2Copy = new String (str2), str3Copy = new String (str3);
if (str2Copy.equals(str3Copy))
{
return str1Copy;
}
StringBuilder b = new StringBuilder(str1Copy);
int index = b.indexOf(str2Copy);
while (index != -1)
{
b.replace(index, (index + str2Copy.length()), str3Copy);
index = b.indexOf(str2Copy, index + 1);
}
return b.toString();
}