Вы, кажется, слишком усложняете это.Вы можете просто использовать метод replace()
:
public static String replaceWordWithLetter(String str, String word, String c) {
return str.replace(word, c);
}
, который при вызове:
replaceWordWithLetter("asdfdsdfjsdf", "sdf", "q")
Производит вывод:
aqdqjq
Проблема с вашим текущим методом заключается в том, что если подстрока не равна word
, вы добавите столько символов, сколько есть в word
, а затем только на один индекс вверх.Если вы не будете заменять последовательность, вам нужно добавить только один символ к result
.Также гораздо эффективнее использовать StringBuilder
.Также, как отмечалось, если String
не делится на word.length()
, это выдаст StringIndexOutOfBoundsError
.Чтобы решить эту проблему, вы можете использовать метод Math.min()
, чтобы подстрока не выходила за пределы.Оригинальный метод с исправлениями:
public static String replaceWordWithLetter(String str, String word, String c) {
StringBuilder result = new StringBuilder();
int index = 0;
while (index < str.length() )
{
String x = str.substring(index, Math.min(index + word.length(), str.length()));
if (x.equals(word))
{
result.append(c);
index = index + word.length();
}
//If we aren't replacing, only add one char
else {
result.append(x.charAt(0));
index++;
}
}
if (str.length() > index)
{
result.append(str.substring(index, str.length() - index));
}
return result.toString();
}